]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xsk: require at least 16 bytes of TX metadata
authorStanislav Fomichev <sdf.kernel@gmail.com>
Mon, 27 Jul 2026 16:19:54 +0000 (09:19 -0700)
committerJakub Kicinski <kuba@kernel.org>
Mon, 3 Aug 2026 23:43:53 +0000 (16:43 -0700)
AF_XDP accepts a TX metadata length as small as eight bytes, but every
supported request needs the flags plus at least one eight-byte request
field. Such short metadata also lets the kernel read beyond the registered
area.

Require 16 bytes rather than sizeof(struct xsk_tx_metadata) to preserve
compatibility with applications that do not use launch-time metadata.

Fixes: 341ac980eab9 ("xsk: Support tx_metadata_len")
Reported-by: AutonomousCodeSecurity@microsoft.com
Reported-by: Cen Zhang (Microsoft) <blbllhy@gmail.com>
Link: https://lore.kernel.org/netdev/20260720155210.34229-1-blbllhy@gmail.com/
Signed-off-by: Stanislav Fomichev <sdf@fomichev.me>
Link: https://patch.msgid.link/20260727161959.885642-2-sdf@fomichev.me
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/xdp/xdp_umem.c

index 58da2f4f4397aafbeea8a93e03849dd8416ac112..cd8643360eb3a26737e6bc56160f9f2792173877 100644 (file)
@@ -210,6 +210,8 @@ static int xdp_umem_reg(struct xdp_umem *umem, struct xdp_umem_reg *mr)
        if (mr->flags & XDP_UMEM_TX_METADATA_LEN) {
                if (mr->tx_metadata_len >= 256 || mr->tx_metadata_len % 8)
                        return -EINVAL;
+               if (mr->tx_metadata_len < 16)
+                       return -EINVAL;
                umem->tx_metadata_len = mr->tx_metadata_len;
        }