Message ID | 20250127131344.238147-1-toke@redhat.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3595599fa8360bb3c7afa7ee50c810b4a64106ea |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,1/2] net: xdp: Disallow attaching device-bound programs in generic mode | expand |
On 1/27/25 2:13 PM, Toke Høiland-Jørgensen wrote: > 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: 2b3486bc2d23 ("bpf: Introduce device-bound XDP programs") > Reported-by: Marcus Wichelmann <marcus.wichelmann@hetzner-cloud.de> > Closes: https://lore.kernel.org/r/dae862ec-43b5-41a0-8edf-46c59071cdda@hetzner-cloud.de > Tested-by: Marcus Wichelmann <marcus.wichelmann@hetzner-cloud.de> > Acked-by: Stanislav Fomichev <sdf@fomichev.me> > Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Acked-by: Daniel Borkmann <daniel@iogearbox.net>
On 1/27/25 5:13 AM, Toke Høiland-Jørgensen wrote: > 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. Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
Hello: This series was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Mon, 27 Jan 2025 14:13:42 +0100 you wrote: > 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. > > [...] Here is the summary with links: - [net,1/2] net: xdp: Disallow attaching device-bound programs in generic mode https://git.kernel.org/netdev/net/c/3595599fa836 - [net,2/2] selftests/net: Add test for loading devbound XDP program in generic mode https://git.kernel.org/netdev/net/c/f7bf624b1fed You are awesome, thank you!
diff --git a/net/core/dev.c b/net/core/dev.c index afa2282f2604..c1fa68264989 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -9924,6 +9924,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;