mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 20:14:06 +02:00
ethtool: module: check fw_flash_in_progress under rtnl_lock
ethnl_set_module_validate() inspects module_fw_flash_in_progress
but validate is meant for _input_ validation, not state validation.
rtnl_lock is not held, yet. Move the check into ethnl_set_module().
Fixes: 32b4c8b53e ("ethtool: Add ability to flash transceiver modules' firmware")
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Reviewed-by: Danielle Ratson <danieller@nvidia.com>
Link: https://patch.msgid.link/20260522231312.1710836-5-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
7a84b965ff
commit
504eaefa44
|
|
@ -120,12 +120,6 @@ ethnl_set_module_validate(struct ethnl_req_info *req_info,
|
||||||
if (!tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY])
|
if (!tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY])
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (req_info->dev->ethtool->module_fw_flash_in_progress) {
|
|
||||||
NL_SET_ERR_MSG(info->extack,
|
|
||||||
"Module firmware flashing is in progress");
|
|
||||||
return -EBUSY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ops->get_module_power_mode || !ops->set_module_power_mode) {
|
if (!ops->get_module_power_mode || !ops->set_module_power_mode) {
|
||||||
NL_SET_ERR_MSG_ATTR(info->extack,
|
NL_SET_ERR_MSG_ATTR(info->extack,
|
||||||
tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY],
|
tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY],
|
||||||
|
|
@ -148,6 +142,12 @@ ethnl_set_module(struct ethnl_req_info *req_info, struct genl_info *info)
|
||||||
|
|
||||||
ops = dev->ethtool_ops;
|
ops = dev->ethtool_ops;
|
||||||
|
|
||||||
|
if (dev->ethtool->module_fw_flash_in_progress) {
|
||||||
|
NL_SET_ERR_MSG(info->extack,
|
||||||
|
"Module firmware flashing is in progress");
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
power_new.policy = nla_get_u8(tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY]);
|
power_new.policy = nla_get_u8(tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY]);
|
||||||
ret = ops->get_module_power_mode(dev, &power, info->extack);
|
ret = ops->get_module_power_mode(dev, &power, info->extack);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user