Message ID | 20250127131344.238147-1-toke@redhat.com (mailing list archive) |
---|---|
State | New |
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>
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;