]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ethtool: module: avoid leaking a netdev ref on module flash errors
authorJakub Kicinski <kuba@kernel.org>
Fri, 22 May 2026 23:13:05 +0000 (16:13 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 26 May 2026 15:19:32 +0000 (08:19 -0700)
module_flash_fw_schedule() is missing undo for setting
the "in_progress" flag and taking the netdev reference.
Delay taking these, the device can't disappear while
we are holding rtnl_lock.

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-3-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ethtool/module.c

index 741f6fb25d457f868beaddbcf8f0d7708b447988..392c03935e5ef360420bbae8084c643bea88c2f4 100644 (file)
@@ -319,8 +319,6 @@ module_flash_fw_schedule(struct net_device *dev, const char *file_name,
        if (err < 0)
                goto err_release_firmware;
 
-       dev->ethtool->module_fw_flash_in_progress = true;
-       netdev_hold(dev, &module_fw->dev_tracker, GFP_KERNEL);
        fw_update->dev = dev;
        fw_update->ntf_params.portid = info->snd_portid;
        fw_update->ntf_params.seq = info->snd_seq;
@@ -335,6 +333,9 @@ module_flash_fw_schedule(struct net_device *dev, const char *file_name,
        if (err < 0)
                goto err_release_firmware;
 
+       dev->ethtool->module_fw_flash_in_progress = true;
+       netdev_hold(dev, &module_fw->dev_tracker, GFP_KERNEL);
+
        schedule_work(&module_fw->work);
 
        return 0;