Commit 6e2ae77c authored by Toke Høiland-Jørgensen's avatar Toke Høiland-Jørgensen Committed by Wentao Guan
Browse files

net: xdp: Disallow attaching device-bound programs in generic mode

stable inclusion
from stable-v6.6.76
commit b1bc4a35a04cbeb85b6ef5911ec015baa424989f
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBW08Q

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



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

[ Upstream commit 3595599fa8360bb3c7afa7ee50c810b4a64106ea ]

Device-bound programs are used to support RX metadata kfuncs. These
kfuncs are driver-specific and rely on the driver context to read the
metadata. This means they can't work in generic XDP mode. However, there
is no check to disallow such programs from being attached in generic
mode, in which case the metadata kfuncs will be called in an invalid
context, leading to crashes.

Fix this by adding a check to disallow attaching device-bound programs
in generic mode.

Fixes: 2b3486bc ("bpf: Introduce device-bound XDP programs")
Reported-by: default avatarMarcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
Closes: https://lore.kernel.org/r/dae862ec-43b5-41a0-8edf-46c59071cdda@hetzner-cloud.de


Tested-by: default avatarMarcus Wichelmann <marcus.wichelmann@hetzner-cloud.de>
Acked-by: default avatarStanislav Fomichev <sdf@fomichev.me>
Signed-off-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
Acked-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20250127131344.238147-1-toke@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
(cherry picked from commit b1bc4a35a04cbeb85b6ef5911ec015baa424989f)
Signed-off-by: default avatarWentao Guan <guanwentao@uniontech.com>
parent 4e0e1449
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -9367,6 +9367,10 @@ static int dev_xdp_attach(struct net_device *dev, struct netlink_ext_ack *extack
			NL_SET_ERR_MSG(extack, "Program bound to different device");
			return -EINVAL;
		}
		if (bpf_prog_is_dev_bound(new_prog->aux) && mode == XDP_MODE_SKB) {
			NL_SET_ERR_MSG(extack, "Can't attach device-bound programs in generic mode");
			return -EINVAL;
		}
		if (new_prog->expected_attach_type == BPF_XDP_DEVMAP) {
			NL_SET_ERR_MSG(extack, "BPF_XDP_DEVMAP programs can not be attached to a device");
			return -EINVAL;