public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 net] net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work
@ 2021-10-11 15:48 Arun Ramadoss
  2021-10-12 10:40 ` patchwork-bot+netdevbpf
  0 siblings, 1 reply; 2+ messages in thread
From: Arun Ramadoss @ 2021-10-11 15:48 UTC (permalink / raw)
  To: linux-kernel, netdev
  Cc: George McCollister, Jakub Kicinski, David S. Miller,
	Vladimir Oltean, Florian Fainelli, Vivien Didelot, Andrew Lunn,
	UNGLinuxDriver, Woojung Huh

When the ksz module is installed and removed using rmmod, kernel crashes
with null pointer dereferrence error. During rmmod, ksz_switch_remove
function tries to cancel the mib_read_workqueue using
cancel_delayed_work_sync routine and unregister switch from dsa.

During dsa_unregister_switch it calls ksz_mac_link_down, which in turn
reschedules the workqueue since mib_interval is non-zero.
Due to which queue executed after mib_interval and it tries to access
dp->slave. But the slave is unregistered in the ksz_switch_remove
function. Hence kernel crashes.

To avoid this crash, before canceling the workqueue, resetted the
mib_interval to 0.

v1 -> v2:
-Removed the if condition in ksz_mib_read_work

Fixes: 469b390e1ba3 ("net: dsa: microchip: use delayed_work instead of timer + work")
Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
---
 drivers/net/dsa/microchip/ksz_common.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 1542bfb8b5e5..7c2968a639eb 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -449,8 +449,10 @@ EXPORT_SYMBOL(ksz_switch_register);
 void ksz_switch_remove(struct ksz_device *dev)
 {
 	/* timer started */
-	if (dev->mib_read_interval)
+	if (dev->mib_read_interval) {
+		dev->mib_read_interval = 0;
 		cancel_delayed_work_sync(&dev->mib_read);
+	}
 
 	dev->dev_ops->exit(dev);
 	dsa_unregister_switch(dev->ds);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2 net] net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work
  2021-10-11 15:48 [PATCH v2 net] net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work Arun Ramadoss
@ 2021-10-12 10:40 ` patchwork-bot+netdevbpf
  0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-10-12 10:40 UTC (permalink / raw)
  To: Arun Ramadoss
  Cc: linux-kernel, netdev, george.mccollister, kuba, davem, olteanv,
	f.fainelli, vivien.didelot, andrew, UNGLinuxDriver, woojung.huh

Hello:

This patch was applied to netdev/net.git (master)
by David S. Miller <davem@davemloft.net>:

On Mon, 11 Oct 2021 21:18:08 +0530 you wrote:
> When the ksz module is installed and removed using rmmod, kernel crashes
> with null pointer dereferrence error. During rmmod, ksz_switch_remove
> function tries to cancel the mib_read_workqueue using
> cancel_delayed_work_sync routine and unregister switch from dsa.
> 
> During dsa_unregister_switch it calls ksz_mac_link_down, which in turn
> reschedules the workqueue since mib_interval is non-zero.
> Due to which queue executed after mib_interval and it tries to access
> dp->slave. But the slave is unregistered in the ksz_switch_remove
> function. Hence kernel crashes.
> 
> [...]

Here is the summary with links:
  - [v2,net] net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work
    https://git.kernel.org/netdev/net/c/ef1100ef20f2

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-10-12 10:40 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-11 15:48 [PATCH v2 net] net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work Arun Ramadoss
2021-10-12 10:40 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox