aboutsummaryrefslogtreecommitdiff
path: root/net/ethtool/wol.c
diff options
context:
space:
mode:
authorGravatar Jakub Kicinski <kuba@kernel.org> 2023-08-14 14:47:23 -0700
committerGravatar Jakub Kicinski <kuba@kernel.org> 2023-08-15 15:01:03 -0700
commitf946270d05c26044c67511ef5a9d91e06962d79f (patch)
tree5e2ed5a4d6937188be0b8b3f13746716ec5a50a3 /net/ethtool/wol.c
parentethtool: netlink: simplify arguments to ethnl_default_parse() (diff)
downloadlinux-f946270d05c26044c67511ef5a9d91e06962d79f.tar.gz
linux-f946270d05c26044c67511ef5a9d91e06962d79f.tar.bz2
linux-f946270d05c26044c67511ef5a9d91e06962d79f.zip
ethtool: netlink: always pass genl_info to .prepare_data
We had a number of bugs in the past because developers forgot to fully test dumps, which pass NULL as info to .prepare_data. .prepare_data implementations would try to access info->extack leading to a null-deref. Now that dumps and notifications can access struct genl_info we can pass it in, and remove the info null checks. Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # pause Reviewed-by: Jiri Pirko <jiri@nvidia.com> Link: https://lore.kernel.org/r/20230814214723.2924989-11-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/ethtool/wol.c')
-rw-r--r--net/ethtool/wol.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ethtool/wol.c b/net/ethtool/wol.c
index a4a43d9e6e9d..0ed56c9ac1bc 100644
--- a/net/ethtool/wol.c
+++ b/net/ethtool/wol.c
@@ -24,7 +24,7 @@ const struct nla_policy ethnl_wol_get_policy[] = {
static int wol_prepare_data(const struct ethnl_req_info *req_base,
struct ethnl_reply_data *reply_base,
- struct genl_info *info)
+ const struct genl_info *info)
{
struct wol_reply_data *data = WOL_REPDATA(reply_base);
struct net_device *dev = reply_base->dev;
@@ -39,7 +39,8 @@ static int wol_prepare_data(const struct ethnl_req_info *req_base,
dev->ethtool_ops->get_wol(dev, &data->wol);
ethnl_ops_complete(dev);
/* do not include password in notifications */
- data->show_sopass = info && (data->wol.supported & WAKE_MAGICSECURE);
+ data->show_sopass = !genl_info_is_ntf(info) &&
+ (data->wol.supported & WAKE_MAGICSECURE);
return 0;
}