netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v2] net: b44: set pause params only when interface is up
@ 2024-04-19 16:17 Peter Münster
  2024-04-19 19:06 ` Andrew Lunn
  0 siblings, 1 reply; 2+ messages in thread
From: Peter Münster @ 2024-04-19 16:17 UTC (permalink / raw)
  To: netdev; +Cc: stable, Michael Chan


[-- Attachment #1.1: Type: text/plain, Size: 165 bytes --]

Hi,

This patch fixes a kernel panic when using netifd.
Could you please apply it also to linux-5.15.y at least?

TIA and kind regards,
-- 
           Peter

[-- Attachment #1.2: 0001-net-b44-set-pause-params-only-when-interface-is-up.patch --]
[-- Type: text/x-patch, Size: 1681 bytes --]

b44_free_rings() accesses b44::rx_buffers (and ::tx_buffers)
unconditionally, but b44::rx_buffers is only valid when the
device is up (they get allocated in b44_open(), and deallocated
again in b44_close()), any other time these is just a NULL pointers.

So if you try to change the pause params while the network interface
is disabled/administratively down, everything explodes (which likely
netifd tries to do).

Link: https://github.com/openwrt/openwrt/issues/13789
Fixes: 1da177e4c3f4 (Linux-2.6.12-rc2)
Reported-by: Peter Münster <pm@a16n.net>
Suggested-by: Jonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: Vaclav Svoboda <svoboda@neng.cz>
Tested-by: Peter Münster <pm@a16n.net>
Signed-off-by: Peter Münster <pm@a16n.net>
---
 drivers/net/ethernet/broadcom/b44.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c
index 3e4fb3c3e834..1be6d14030bc 100644
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -2009,12 +2009,14 @@ static int b44_set_pauseparam(struct net_device *dev,
 		bp->flags |= B44_FLAG_TX_PAUSE;
 	else
 		bp->flags &= ~B44_FLAG_TX_PAUSE;
-	if (bp->flags & B44_FLAG_PAUSE_AUTO) {
-		b44_halt(bp);
-		b44_init_rings(bp);
-		b44_init_hw(bp, B44_FULL_RESET);
-	} else {
-		__b44_set_flow_ctrl(bp, bp->flags);
+	if (netif_running(dev)) {
+		if (bp->flags & B44_FLAG_PAUSE_AUTO) {
+			b44_halt(bp);
+			b44_init_rings(bp);
+			b44_init_hw(bp, B44_FULL_RESET);
+		} else {
+			__b44_set_flow_ctrl(bp, bp->flags);
+		}
 	}
 	spin_unlock_irq(&bp->lock);
 
-- 
2.35.3


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 211 bytes --]

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

* Re: [PATCH net v2] net: b44: set pause params only when interface is up
  2024-04-19 16:17 [PATCH net v2] net: b44: set pause params only when interface is up Peter Münster
@ 2024-04-19 19:06 ` Andrew Lunn
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Lunn @ 2024-04-19 19:06 UTC (permalink / raw)
  To: Peter Münster; +Cc: netdev, stable, Michael Chan

On Fri, Apr 19, 2024 at 06:17:47PM +0200, Peter Münster wrote:
> Hi,
> 
> This patch fixes a kernel panic when using netifd.
> Could you please apply it also to linux-5.15.y at least?
> 
> TIA and kind regards,
> -- 
>            Peter

Hi Peter

This is better, but still has some process issues.

> b44_free_rings() accesses b44::rx_buffers (and ::tx_buffers)
> unconditionally, but b44::rx_buffers is only valid when the
> device is up (they get allocated in b44_open(), and deallocated
> again in b44_close()), any other time these is just a NULL pointers.
> 
> So if you try to change the pause params while the network interface
> is disabled/administratively down, everything explodes (which likely
> netifd tries to do).
> 
> Link: https://github.com/openwrt/openwrt/issues/13789
> Fixes: 1da177e4c3f4 (Linux-2.6.12-rc2)

Cc: stable@vger.kernel.org

needs to go here. Your patch will first get applied to the next -rc
release. Once it is published there, any patches with this tag are
automatically added to the list for backporting to stable. That will
include all long term stable branches, so there is no need to request
specifically linux-5.15.

There is some documentation about this here:

https://www.kernel.org/doc/Documentation/process/stable-kernel-rules.rst

> Reported-by: Peter Münster <pm@a16n.net>
> Suggested-by: Jonas Gorski <jonas.gorski@gmail.com>
> Signed-off-by: Vaclav Svoboda <svoboda@neng.cz>
> Tested-by: Peter Münster <pm@a16n.net>
> Signed-off-by: Peter Münster <pm@a16n.net>
> ---

Anything above the --- gets merged as the commit message. Anything
below it and the patch proper gets discarded. This is where you can
add comments for Maintainers etc. For this patch, you don't actually
need any such comments.

I often say to mainline newbies: The code is easy, the hard bit is the
processes.

	Andrew

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

end of thread, other threads:[~2024-04-19 19:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-19 16:17 [PATCH net v2] net: b44: set pause params only when interface is up Peter Münster
2024-04-19 19:06 ` Andrew Lunn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).