summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorGavrilov Ilia <Ilia.Gavrilov@infotecs.ru>2025-03-13 08:50:08 +0000
committerPaolo Abeni <pabeni@redhat.com>2025-03-19 22:57:04 +0100
commit559847f56769037e5b2e0474d3dbff985b98083d (patch)
tree37e47070cb15e8a4719bb928229dab6c4d0bea47 /net
parenta0aff75e1553913bfbff10ebb372c7dc0971d2dd (diff)
downloadlinux-559847f56769037e5b2e0474d3dbff985b98083d.tar.gz
linux-559847f56769037e5b2e0474d3dbff985b98083d.tar.bz2
linux-559847f56769037e5b2e0474d3dbff985b98083d.zip
xsk: fix an integer overflow in xp_create_and_assign_umem()
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>
Diffstat (limited to 'net')
-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 1f7975b49657..d158cb6dd391 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -105,7 +105,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;