Message ID | 20230713094419.2534581-1-jiri@resnulli.us (mailing list archive) |
---|---|
State | Accepted |
Commit | 633d76ad01ad0321a1ace3e5cc4fed06753d7ac4 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v2] devlink: remove reload failed checks in params get/set callbacks | expand |
On Thu, Jul 13, 2023 at 11:44:19AM +0200, Jiri Pirko wrote: > From: Jiri Pirko <jiri@nvidia.com> > > The checks in question were introduced by: > commit 6b4db2e528f6 ("devlink: Fix use-after-free after a failed reload"). > That fixed an issue of reload with mlxsw driver. > > Back then, that was a valid fix, because there was a limitation > in place that prevented drivers from registering/unregistering params > when devlink instance was registered. > > It was possible to do the fix differently by changing drivers to > register/unregister params in appropriate places making sure the ops > operate only on memory which is allocated and initialized. But that, > as a dependency, would require to remove the limitation mentioned above. > > Eventually, this limitation was lifted by: > commit 1d18bb1a4ddd ("devlink: allow registering parameters after the instance") > > Also, the alternative fix (which also fixed another issue) was done by: > commit 74cbc3c03c82 ("mlxsw: spectrum_acl_tcam: Move devlink param to TCAM code"). > > Therefore, the checks are no longer relevant. Each driver should make > sure to have the params registered only when the memory the ops > are working with is allocated and initialized. > > So remove the checks. > > Signed-off-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com>
On Thu, 13 Jul 2023 11:44:19 +0200 Jiri Pirko wrote: > From: Jiri Pirko <jiri@nvidia.com> > > The checks in question were introduced by: > commit 6b4db2e528f6 ("devlink: Fix use-after-free after a failed reload"). > That fixed an issue of reload with mlxsw driver. > > Back then, that was a valid fix, because there was a limitation > in place that prevented drivers from registering/unregistering params > when devlink instance was registered. > > It was possible to do the fix differently by changing drivers to > register/unregister params in appropriate places making sure the ops > operate only on memory which is allocated and initialized. But that, > as a dependency, would require to remove the limitation mentioned above. > > Eventually, this limitation was lifted by: > commit 1d18bb1a4ddd ("devlink: allow registering parameters after the instance") > > Also, the alternative fix (which also fixed another issue) was done by: > commit 74cbc3c03c82 ("mlxsw: spectrum_acl_tcam: Move devlink param to TCAM code"). > > Therefore, the checks are no longer relevant. Each driver should make > sure to have the params registered only when the memory the ops > are working with is allocated and initialized. > > So remove the checks. > > Signed-off-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Hello: This patch was applied to netdev/net-next.git (main) by David S. Miller <davem@davemloft.net>: On Thu, 13 Jul 2023 11:44:19 +0200 you wrote: > From: Jiri Pirko <jiri@nvidia.com> > > The checks in question were introduced by: > commit 6b4db2e528f6 ("devlink: Fix use-after-free after a failed reload"). > That fixed an issue of reload with mlxsw driver. > > Back then, that was a valid fix, because there was a limitation > in place that prevented drivers from registering/unregistering params > when devlink instance was registered. > > [...] Here is the summary with links: - [net-next,v2] devlink: remove reload failed checks in params get/set callbacks https://git.kernel.org/netdev/net-next/c/633d76ad01ad You are awesome, thank you!
diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c index 1f00f874471f..5128b9c7eea8 100644 --- a/net/devlink/leftover.c +++ b/net/devlink/leftover.c @@ -3946,7 +3946,7 @@ static int devlink_param_get(struct devlink *devlink, const struct devlink_param *param, struct devlink_param_gset_ctx *ctx) { - if (!param->get || devlink->reload_failed) + if (!param->get) return -EOPNOTSUPP; return param->get(devlink, param->id, ctx); } @@ -3955,7 +3955,7 @@ static int devlink_param_set(struct devlink *devlink, const struct devlink_param *param, struct devlink_param_gset_ctx *ctx) { - if (!param->set || devlink->reload_failed) + if (!param->set) return -EOPNOTSUPP; return param->set(devlink, param->id, ctx); }