Commit be4dd44e authored by Jiwon Kim's avatar Jiwon Kim Committed by Wen Zhiwei
Browse files

bonding: Fix unnecessary warnings and logs from bond_xdp_get_xmit_slave()

stable inclusion
from stable-v6.6.54
commit ccd3e6ff05e5236d1b9535f23f3e6622e0bb32b8
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAZ3K2

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=ccd3e6ff05e5236d1b9535f23f3e6622e0bb32b8



--------------------------------

[ Upstream commit 0cbfd45fbcf0cb26d85c981b91c62fe73cdee01c ]

syzbot reported a WARNING in bond_xdp_get_xmit_slave. To reproduce
this[1], one bond device (bond1) has xdpdrv, which increases
bpf_master_redirect_enabled_key. Another bond device (bond0) which is
unsupported by XDP but its slave (veth3) has xdpgeneric that returns
XDP_TX. This triggers WARN_ON_ONCE() from the xdp_master_redirect().
To reduce unnecessary warnings and improve log management, we need to
delete the WARN_ON_ONCE() and add ratelimit to the netdev_err().

[1] Steps to reproduce:
    # Needs tx_xdp with return XDP_TX;
    ip l add veth0 type veth peer veth1
    ip l add veth3 type veth peer veth4
    ip l add bond0 type bond mode 6 # BOND_MODE_ALB, unsupported by XDP
    ip l add bond1 type bond # BOND_MODE_ROUNDROBIN by default
    ip l set veth0 master bond1
    ip l set bond1 up
    # Increases bpf_master_redirect_enabled_key
    ip l set dev bond1 xdpdrv object tx_xdp.o section xdp_tx
    ip l set veth3 master bond0
    ip l set bond0 up
    ip l set veth4 up
    # Triggers WARN_ON_ONCE() from the xdp_master_redirect()
    ip l set veth3 xdpgeneric object tx_xdp.o section xdp_tx

Reported-by: default avatar <syzbot+c187823a52ed505b2257@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=c187823a52ed505b2257


Fixes: 9e2ee5c7 ("net, bonding: Add XDP support to the bonding driver")
Signed-off-by: default avatarJiwon Kim <jiwonaid0@gmail.com>
Signed-off-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
Link: https://patch.msgid.link/20240918140602.18644-1-jiwonaid0@gmail.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarWen Zhiwei <wenzhiwei@kylinos.cn>
parent bdf334a3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -5576,9 +5576,9 @@ bond_xdp_get_xmit_slave(struct net_device *bond_dev, struct xdp_buff *xdp)
		break;

	default:
		/* Should never happen. Mode guarded by bond_xdp_check() */
		netdev_err(bond_dev, "Unknown bonding mode %d for xdp xmit\n", BOND_MODE(bond));
		WARN_ON_ONCE(1);
		if (net_ratelimit())
			netdev_err(bond_dev, "Unknown bonding mode %d for xdp xmit\n",
				   BOND_MODE(bond));
		return NULL;
	}