summaryrefslogtreecommitdiff
path: root/trafgen.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2014-04-30 13:32:08 +0200
committerTobias Klauser <tklauser@distanz.ch>2014-04-30 13:32:08 +0200
commitf4821f92614bafaaee01721b3a5ffc29fe2f5365 (patch)
tree87b71ab410183ad1497e7cf6798aa7b3dc72dba3 /trafgen.c
parent190dc7879a1a8813f2332ee7b39b743a49ac2771 (diff)
ring: Consistently use size_t to specify ring size
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 <jonschipp@gmail.com> Reported-by: Michał Purzyński <michalpurzynski1@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'trafgen.c')
-rw-r--r--trafgen.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/trafgen.c b/trafgen.c
index 489ff53..43148b7 100644
--- a/trafgen.c
+++ b/trafgen.c
@@ -56,7 +56,8 @@
struct ctx {
bool rand, rfraw, jumbo_support, verbose, smoke_test, enforce, qdisc_path;
- unsigned long num, reserve_size;
+ size_t reserve_size;
+ unsigned long num;
unsigned int cpus;
uid_t uid; gid_t gid;
char *device, *device_trans, *rhost;
@@ -590,7 +591,8 @@ static void xmit_fastpath_or_die(struct ctx *ctx, int cpu, unsigned long orig_nu
int ifindex = device_ifindex(ctx->device);
uint8_t *out = NULL;
unsigned int it = 0;
- unsigned long num = 1, i = 0, size;
+ unsigned long num = 1, i = 0;
+ size_t size;
struct ring tx_ring;
struct frame_map *hdr;
struct timeval start, end, diff;