]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ethtool: module: check fw_flash_in_progress under rtnl_lock
authorJakub Kicinski <kuba@kernel.org>
Fri, 22 May 2026 23:13:07 +0000 (16:13 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 26 May 2026 15:19:32 +0000 (08:19 -0700)
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: 32b4c8b53ee7 ("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>
net/ethtool/module.c

index cdb85e19a23b46a3606a07641a4ae9f9cf74e067..5b49004ddf60de837910d2ce58a207202f382acd 100644 (file)
@@ -120,12 +120,6 @@ ethnl_set_module_validate(struct ethnl_req_info *req_info,
        if (!tb[ETHTOOL_A_MODULE_POWER_MODE_POLICY])
                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) {
                NL_SET_ERR_MSG_ATTR(info->extack,
                                    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;
 
+       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]);
        ret = ops->get_module_power_mode(dev, &power, info->extack);
        if (ret < 0)