From: Victor Julien Date: Tue, 29 Aug 2017 10:57:53 +0000 (+0200) Subject: afpacket: free ring mem on error X-Git-Tag: suricata-4.0.1~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f47df5a671c96cd3bcbbd49c688877a90e267b7a;p=thirdparty%2Fsuricata.git afpacket: free ring mem on error --- diff --git a/src/source-af-packet.c b/src/source-af-packet.c index b225057fbf..761c634a85 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -2041,8 +2041,7 @@ static int AFPCreateSocket(AFPThreadVars *ptv, char *devname, int verbose) break; } - TmEcode rc; - rc = AFPSetBPFFilter(ptv); + TmEcode rc = AFPSetBPFFilter(ptv); if (rc == TM_ECODE_FAILED) { SCLogError(SC_ERR_AFP_CREATE, "Set AF_PACKET bpf filter \"%s\" failed.", ptv->bpf_filter); ret = AFP_FATAL_ERROR; @@ -2056,6 +2055,18 @@ static int AFPCreateSocket(AFPThreadVars *ptv, char *devname, int verbose) socket_err: close(ptv->socket); ptv->socket = -1; + if (ptv->flags & AFP_TPACKET_V3) { + if (ptv->ring_v3) { + SCFree(ptv->ring_v3); + ptv->ring_v3 = NULL; + } + } else { + if (ptv->ring_v2) { + SCFree(ptv->ring_v2); + ptv->ring_v2 = NULL; + } + } + error: return -ret; }