net: b44: set pause params only when interface is up
Subsystems (3)
PATCH 1/1 net: b44: set pause params only when interface is up
Hi,
This patch fixes a kernel panic when using netifd. Could you please apply it to linux-5.15.y?
TIA and kind regards,
Signature · 1 line
Peter
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).
--- drivers/net/ethernet/broadcom/b44.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/net/ethernet/broadcom/b44.c +8 -6
@@ -2029,12 +2029,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);
Signature · 1 line
2.35.3
Quoted 4 lines · Peter Münster
Hi,
This patch fixes a kernel panic when using netifd. Could you please apply it to linux-5.15.y?
Hi Peter
Please take a read of:
https://docs.kernel.org/process/submitting-patches.html
https://www.kernel.org/doc/html/latest/process/maintainer-netdev.html#netdev-faq
This is a networking fix, so please base the patch on net:
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
Please include a Fixed: tag indicating when the problem was added.
Also, add a Cc: [email protected], which will cause the patch to be back ported to stable trees, including linux-5.15.
You can use the script scripts/get_maintainer.pl to get a list of Maintainers you should Cc: the patch to.
The code change itself looks reasonable, although Florian should review it.
Thanks
Andrew
Quoted 1 line · Andrew Lunn
Please include a Fixed: tag indicating when the problem was added.
Hi Andrew,
I’m sorry, I don’t know, when the problem was added. I only know, that there was no problem with OpenWrt < 23.X. But I don’t know why. Perhaps the behaviour of netifd has changed from 22.X to 23.X.
So I guess, that the problem is there since the creation of b44_set_pauseparam(), but it has never been triggered before.
So what should I do please with the Fixed: tag?
TIA for any hints,
Signature · 1 line
Peter
Michael Chan
maintainerQuoted 7 lines · Peter Münster
Quoted 1 line · Andrew Lunn
Please include a Fixed: tag indicating when the problem was added.
Hi Andrew,
Quoted 9 lines
I’m sorry, I don’t know, when the problem was added. I only know, that there was no problem with OpenWrt < 23.X. But I don’t know why. Perhaps the behaviour of netifd has changed from 22.X to 23.X.
So I guess, that the problem is there since the creation of
b44_set_pauseparam(), but it has never been triggered before.So what should I do please with the Fixed: tag?
It looks like this dates back to the beginning of git. So I guess it should be:
Quoted 12 lines · Michael Chan
Quoted 11 lines · Peter Münster
Quoted 1 line · Andrew Lunn
Please include a Fixed: tag indicating when the problem was added.
Hi Andrew,
I’m sorry, I don’t know, when the problem was added. I only know, that there was no problem with OpenWrt < 23.X. But I don’t know why. Perhaps the behaviour of netifd has changed from 22.X to 23.X.
Quoted 7 lines
Quoted 5 lines
So I guess, that the problem is there since the creation of
b44_set_pauseparam(), but it has never been triggered before.So what should I do please with the Fixed: tag?
It looks like this dates back to the beginning of git. So I guess it should be:
Yes, i came to the same conclusion.
Quoted 1 line
Fixes 1da177e4c3f4 (Linux-2.6.12-rc2)
Agreed.
Andrew