]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
af/xdp: fix memory leaks on thread init failure
authorVictor Julien <vjulien@oisf.net>
Tue, 25 Apr 2023 05:22:15 +0000 (07:22 +0200)
committerVictor Julien <vjulien@oisf.net>
Tue, 25 Apr 2023 05:22:19 +0000 (07:22 +0200)
source-af-xdp.c:675:21: warning: Potential leak of memory pointed to by 'ptv' [unix.Malloc]
        SCReturnInt(TM_ECODE_FAILED);
                    ^~~~~~~~~~~~~~~
./util-debug.h:275:48: note: expanded from macro 'SCReturnInt'
 #define SCReturnInt(x)                  return x
                                                ^
1 warning generated.

src/source-af-xdp.c

index 4036e0507684cb09a8b83f39be428d3b7c97e30f..6f8f8815e0de7261181060934d975acbb51432c0 100644 (file)
@@ -628,6 +628,7 @@ static TmEcode ReceiveAFXDPThreadInit(ThreadVars *tv, const void *initdata, void
         if (SetIfaceFlags(ptv->iface, IFF_PROMISC | IFF_UP) != 0) {
             SCLogError("Failed to switch interface (%s) to promiscuous, error %s", ptv->iface,
                     strerror(errno));
+            SCFree(ptv);
             SCReturnInt(TM_ECODE_FAILED);
         }
     }
@@ -672,10 +673,12 @@ static TmEcode ReceiveAFXDPThreadInit(ThreadVars *tv, const void *initdata, void
 
     /* Reserve memory for umem  */
     if (AcquireBuffer(ptv) != TM_ECODE_OK) {
+        SCFree(ptv);
         SCReturnInt(TM_ECODE_FAILED);
     }
 
     if (AFXDPSocketCreation(ptv) != TM_ECODE_OK) {
+        ReceiveAFXDPThreadDeinit(tv, ptv);
         SCReturnInt(TM_ECODE_FAILED);
     }