From: Victor Julien Date: Wed, 27 Apr 2022 09:32:22 +0000 (+0200) Subject: af-packet/v2: use proper type for ring X-Git-Tag: suricata-5.0.10~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2b38ce84c486066af47098655bda897a980520c;p=thirdparty%2Fsuricata.git af-packet/v2: use proper type for ring cppcheck: src/source-af-packet.c:1762:19: warning: Size of pointer 'v2' used instead of size of its data. This is likely to lead to a buffer overflow. You probably intend to write 'sizeof(*v2)'. [pointerSize] ptv->ring.v2 = SCMalloc(ptv->req.v2.tp_frame_nr * sizeof (union thdr *)); ^ src/source-af-packet.c:1767:26: warning: Size of pointer 'v2' used instead of size of its data. This is likely to lead to a buffer overflow. You probably intend to write 'sizeof(*v2)'. [pointerSize] memset(ptv->ring.v2, 0, ptv->req.v2.tp_frame_nr * sizeof (union thdr *)); ^ scan-build: CC source-af-packet.o source-af-packet.c:1762:24: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'union thdr *' [unix.MallocSizeof] ptv->ring.v2 = SCMalloc(ptv->req.v2.tp_frame_nr * sizeof (union thdr *)); ^~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ ./util-mem.h:35:18: note: expanded from macro 'SCMalloc' ^~~~~~ 1 warning generated. Bug: #5291. (cherry picked from commit fedced209dc25443ec5eee22bfab6c99f9f652ab) --- diff --git a/src/source-af-packet.c b/src/source-af-packet.c index d702c4430e..9a2e283c50 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -261,7 +261,7 @@ static int AFPXDPBypassCallback(Packet *p); typedef struct AFPThreadVars_ { union AFPRing { - char *v2; + union thdr **v2; struct iovec *v3; } ring; @@ -2010,12 +2010,11 @@ static int AFPSetupRing(AFPThreadVars *ptv, char *devname) } else { #endif /* allocate a ring for each frame header pointer*/ - ptv->ring.v2 = SCMalloc(ptv->req.v2.tp_frame_nr * sizeof (union thdr *)); + ptv->ring.v2 = SCCalloc(ptv->req.v2.tp_frame_nr, sizeof(union thdr *)); if (ptv->ring.v2 == NULL) { SCLogError(SC_ERR_MEM_ALLOC, "Unable to allocate frame buf"); goto postmmap_err; } - memset(ptv->ring.v2, 0, ptv->req.v2.tp_frame_nr * sizeof (union thdr *)); /* fill the header ring with proper frame ptr*/ ptv->frame_offset = 0; for (i = 0; i < ptv->req.v2.tp_block_nr; ++i) {