summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavrilov Ilia <Ilia.Gavrilov@infotecs.ru>2025-03-13 08:50:08 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-03-28 21:59:55 +0100
commitb7b4be1fa43294b50b22e812715198629806678a (patch)
treedab7975592e1b0b4419d4be4860cc8bc32b5cb73
parent19f4e715f6659cd85dd7125fc4612a11d23a21bc (diff)
downloadlinux-b7b4be1fa43294b50b22e812715198629806678a.tar.gz
linux-b7b4be1fa43294b50b22e812715198629806678a.tar.bz2
linux-b7b4be1fa43294b50b22e812715198629806678a.zip
xsk: fix an integer overflow in xp_create_and_assign_umem()
commit 559847f56769037e5b2e0474d3dbff985b98083d upstream. Since the i and pool->chunk_size variables are of type 'u32', their product can wrap around and then be cast to 'u64'. This can lead to two different XDP buffers pointing to the same memory area. Found by InfoTeCS on behalf of Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 94033cd8e73b ("xsk: Optimize for aligned case") Cc: stable@vger.kernel.org Signed-off-by: Ilia Gavrilov <Ilia.Gavrilov@infotecs.ru> Link: https://patch.msgid.link/20250313085007.3116044-1-Ilia.Gavrilov@infotecs.ru Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/xdp/xsk_buff_pool.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
index f38388b6b62c..e83b707da25b 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -104,7 +104,7 @@ struct xsk_buff_pool *xp_create_and_assign_umem(struct xdp_sock *xs,
if (pool->unaligned)
pool->free_heads[i] = xskb;
else
- xp_init_xskb_addr(xskb, pool, i * pool->chunk_size);
+ xp_init_xskb_addr(xskb, pool, (u64)i * pool->chunk_size);
}
return pool;