From f4821f92614bafaaee01721b3a5ffc29fe2f5365 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 30 Apr 2014 13:32:08 +0200 Subject: ring: Consistently use size_t to specify ring size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The mm_len member of struct ring is of type size_t, but in the code paths leading to set it, unsigned int is used. In circumstances where unsigned int is 32 bit and size_t is 64 bit, this could lead to an integer overflow, which causes an improper ring size being mmap()'ed in mmap_ring_generic(). In order to prevent this, consistently use size_t to store the ring size, since this is also what mmap() takes as its `length' parameter. This now allows to specify ring sizes larger than 4 GiB for both netsniff-ng and trafgen (fixes #90). Reported-by: Jon Schipp Reported-by: Michał Purzyński Signed-off-by: Tobias Klauser --- ring_rx.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ring_rx.h') diff --git a/ring_rx.h b/ring_rx.h index 5057a30..1a60453 100644 --- a/ring_rx.h +++ b/ring_rx.h @@ -16,8 +16,8 @@ extern void create_rx_ring(int sock, struct ring *ring, int verbose); extern void mmap_rx_ring(int sock, struct ring *ring); extern void alloc_rx_ring_frames(int sock, struct ring *ring); extern void bind_rx_ring(int sock, struct ring *ring, int ifindex); -extern void setup_rx_ring_layout(int sock, struct ring *ring, - unsigned int size, bool jumbo_support, bool v3); +extern void setup_rx_ring_layout(int sock, struct ring *ring, size_t size, + bool jumbo_support, bool v3); extern void sock_rx_net_stats(int sock, unsigned long seen); static inline int user_may_pull_from_rx(struct tpacket2_hdr *hdr) -- cgit v1.2.3-54-g00ecf