From: Lukas Wunner <lukas@wunner.de>
To: Kurt Kanzenbach <kurt@linutronix.de>, Roman Lozko <lozko.roma@gmail.com>
Cc: Andrew Lunn <andrew@lunn.ch>,
Sasha Neftin <sasha.neftin@intel.com>,
intel-wired-lan@lists.osuosl.org,
Eric Dumazet <edumazet@google.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
netdev@vger.kernel.org, Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [Intel-wired-lan] [PATCH iwl-net] igc: Fix deadlock on module removal
Date: Sun, 14 Apr 2024 11:02:06 +0200 [thread overview]
Message-ID: <Zhubjkscu9HPgUcA@wunner.de> (raw)
In-Reply-To: <20240411-igc_led_deadlock-v1-1-0da98a3c68c5@linutronix.de>
[cc += Roman Lozko who originally reported the issue]
On Sun, Apr 14, 2024 at 09:44:10AM +0200, Kurt Kanzenbach wrote:
> unregister_netdev() acquires the RNTL lock and releases the LEDs bound
> to that netdevice. However, netdev_trig_deactivate() and later
> unregister_netdevice_notifier() try to acquire the RTNL lock again.
>
> Avoid this situation by not using the device-managed LED class
> functions.
>
> Suggested-by: Lukas Wunner <lukas@wunner.de>
> Fixes: ea578703b03d ("igc: Add support for LEDs on i225/i226")
> Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
This patch is almost a 1:1 copy of the patch I submitted on April 5:
https://lore.kernel.org/all/ZhBN9p1yOyciXkzw@wunner.de/
I think it is mandatory that you include a Signed-off-by with my name
in that case. Arguably the commit author ("From:") should also be me.
Moreover this is missing a Reported-by tag with Roman Lozko's name.
AFAICS the only changes that you made are:
- rename igc_led_teardown() to igc_led_free()
- rename ret to err
- replace devm_kcalloc() with kcalloc()
(and you introduced a memory leak while doing so, see below)
Honestly I don't see how those small changes justify omitting a
Signed-off-by or assuming authorship.
I would have been happy to submit a patch myself, I was waiting
for a Tested-by from Roman or you.
> --- a/drivers/net/ethernet/intel/igc/igc.h
> +++ b/drivers/net/ethernet/intel/igc/igc.h
> @@ -164,6 +164,8 @@ struct igc_ring {
> struct xsk_buff_pool *xsk_pool;
> } ____cacheline_internodealigned_in_smp;
>
> +struct igc_led_classdev;
Unnecessary forward declaration, this compiled fine for me without it.
> int igc_led_setup(struct igc_adapter *adapter)
> {
> struct net_device *netdev = adapter->netdev;
> - struct device *dev = &netdev->dev;
> struct igc_led_classdev *leds;
> - int i;
> + int i, err;
>
> mutex_init(&adapter->led_mutex);
>
> - leds = devm_kcalloc(dev, IGC_NUM_LEDS, sizeof(*leds), GFP_KERNEL);
> + leds = kcalloc(IGC_NUM_LEDS, sizeof(*leds), GFP_KERNEL);
> if (!leds)
> return -ENOMEM;
>
> - for (i = 0; i < IGC_NUM_LEDS; i++)
> - igc_setup_ldev(leds + i, netdev, i);
> + for (i = 0; i < IGC_NUM_LEDS; i++) {
> + err = igc_setup_ldev(leds + i, netdev, i);
> + if (err)
> + goto err;
> + }
> +
> + adapter->leds = leds;
>
> return 0;
> +
> +err:
> + for (i--; i >= 0; i--)
> + led_classdev_unregister(&((leds + i)->led));
> +
> + return err;
> +}
"leds" allocation is leaked in the error path.
This memory leak was not present in my original patch. Not good!
Thanks,
Lukas
WARNING: multiple messages have this Message-ID (diff)
From: Lukas Wunner <lukas@wunner.de>
To: Kurt Kanzenbach <kurt@linutronix.de>, Roman Lozko <lozko.roma@gmail.com>
Cc: Jesse Brandeburg <jesse.brandeburg@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Andrew Lunn <andrew@lunn.ch>,
Sasha Neftin <sasha.neftin@intel.com>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org
Subject: Re: [PATCH iwl-net] igc: Fix deadlock on module removal
Date: Sun, 14 Apr 2024 11:02:06 +0200 [thread overview]
Message-ID: <Zhubjkscu9HPgUcA@wunner.de> (raw)
In-Reply-To: <20240411-igc_led_deadlock-v1-1-0da98a3c68c5@linutronix.de>
[cc += Roman Lozko who originally reported the issue]
On Sun, Apr 14, 2024 at 09:44:10AM +0200, Kurt Kanzenbach wrote:
> unregister_netdev() acquires the RNTL lock and releases the LEDs bound
> to that netdevice. However, netdev_trig_deactivate() and later
> unregister_netdevice_notifier() try to acquire the RTNL lock again.
>
> Avoid this situation by not using the device-managed LED class
> functions.
>
> Suggested-by: Lukas Wunner <lukas@wunner.de>
> Fixes: ea578703b03d ("igc: Add support for LEDs on i225/i226")
> Signed-off-by: Kurt Kanzenbach <kurt@linutronix.de>
This patch is almost a 1:1 copy of the patch I submitted on April 5:
https://lore.kernel.org/all/ZhBN9p1yOyciXkzw@wunner.de/
I think it is mandatory that you include a Signed-off-by with my name
in that case. Arguably the commit author ("From:") should also be me.
Moreover this is missing a Reported-by tag with Roman Lozko's name.
AFAICS the only changes that you made are:
- rename igc_led_teardown() to igc_led_free()
- rename ret to err
- replace devm_kcalloc() with kcalloc()
(and you introduced a memory leak while doing so, see below)
Honestly I don't see how those small changes justify omitting a
Signed-off-by or assuming authorship.
I would have been happy to submit a patch myself, I was waiting
for a Tested-by from Roman or you.
> --- a/drivers/net/ethernet/intel/igc/igc.h
> +++ b/drivers/net/ethernet/intel/igc/igc.h
> @@ -164,6 +164,8 @@ struct igc_ring {
> struct xsk_buff_pool *xsk_pool;
> } ____cacheline_internodealigned_in_smp;
>
> +struct igc_led_classdev;
Unnecessary forward declaration, this compiled fine for me without it.
> int igc_led_setup(struct igc_adapter *adapter)
> {
> struct net_device *netdev = adapter->netdev;
> - struct device *dev = &netdev->dev;
> struct igc_led_classdev *leds;
> - int i;
> + int i, err;
>
> mutex_init(&adapter->led_mutex);
>
> - leds = devm_kcalloc(dev, IGC_NUM_LEDS, sizeof(*leds), GFP_KERNEL);
> + leds = kcalloc(IGC_NUM_LEDS, sizeof(*leds), GFP_KERNEL);
> if (!leds)
> return -ENOMEM;
>
> - for (i = 0; i < IGC_NUM_LEDS; i++)
> - igc_setup_ldev(leds + i, netdev, i);
> + for (i = 0; i < IGC_NUM_LEDS; i++) {
> + err = igc_setup_ldev(leds + i, netdev, i);
> + if (err)
> + goto err;
> + }
> +
> + adapter->leds = leds;
>
> return 0;
> +
> +err:
> + for (i--; i >= 0; i--)
> + led_classdev_unregister(&((leds + i)->led));
> +
> + return err;
> +}
"leds" allocation is leaked in the error path.
This memory leak was not present in my original patch. Not good!
Thanks,
Lukas
next prev parent reply other threads:[~2024-04-14 9:17 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-14 7:44 [Intel-wired-lan] [PATCH iwl-net] igc: Fix deadlock on module removal Kurt Kanzenbach
2024-04-14 7:44 ` Kurt Kanzenbach
2024-04-14 9:02 ` Lukas Wunner [this message]
2024-04-14 9:02 ` Lukas Wunner
2024-04-14 9:15 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-04-14 9:15 ` Kurt Kanzenbach
2024-04-15 11:02 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-04-15 11:02 ` Kurt Kanzenbach
2024-04-15 13:54 ` [Intel-wired-lan] " Lukas Wunner
2024-04-15 13:54 ` Lukas Wunner
2024-04-15 14:00 ` [Intel-wired-lan] " Kurt Kanzenbach
2024-04-15 14:00 ` Kurt Kanzenbach
2024-04-15 13:51 ` [Intel-wired-lan] " Lukas Wunner
2024-04-15 13:51 ` Lukas Wunner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Zhubjkscu9HPgUcA@wunner.de \
--to=lukas@wunner.de \
--cc=andrew@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kuba@kernel.org \
--cc=kurt@linutronix.de \
--cc=lozko.roma@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sasha.neftin@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.