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>
This commit is contained in:
@ -51,8 +51,7 @@ static int fallback_set_params(struct eeprom_req_info *request,
|
||||
}
|
||||
|
||||
static int eeprom_fallback(struct eeprom_req_info *request,
|
||||
struct eeprom_reply_data *reply,
|
||||
struct genl_info *info)
|
||||
struct eeprom_reply_data *reply)
|
||||
{
|
||||
struct net_device *dev = reply->base.dev;
|
||||
struct ethtool_modinfo modinfo = {0};
|
||||
@ -103,7 +102,7 @@ static int get_module_eeprom_by_page(struct net_device *dev,
|
||||
|
||||
static int eeprom_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 eeprom_reply_data *reply = MODULE_EEPROM_REPDATA(reply_base);
|
||||
struct eeprom_req_info *request = MODULE_EEPROM_REQINFO(req_base);
|
||||
@ -124,7 +123,7 @@ static int eeprom_prepare_data(const struct ethnl_req_info *req_base,
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
ret = get_module_eeprom_by_page(dev, &page_data, info ? info->extack : NULL);
|
||||
ret = get_module_eeprom_by_page(dev, &page_data, info->extack);
|
||||
if (ret < 0)
|
||||
goto err_ops;
|
||||
|
||||
@ -140,7 +139,7 @@ err_free:
|
||||
kfree(page_data.data);
|
||||
|
||||
if (ret == -EOPNOTSUPP)
|
||||
return eeprom_fallback(request, reply, info);
|
||||
return eeprom_fallback(request, reply);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user