diff mbox series

[ovs-dev,branch-2.17,1/2] dpctl: Fix memory leak in flush conntrack

Message ID 20230215084852.255795-1-amusil@redhat.com
State Accepted
Commit d87b6180ecb9a25e8aa86d8e6737893f83abd0a8
Headers show
Series [ovs-dev,branch-2.17,1/2] dpctl: Fix memory leak in flush conntrack | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/intel-ovs-compilation success test: success
ovsrobot/github-robot-_Build_and_Test success github build: passed

Commit Message

Ales Musil Feb. 15, 2023, 8:48 a.m. UTC
Direct leak of 36 byte(s) in 1 object(s) allocated from:
    #0 0x527d90 in __interceptor_realloc.part.0 asan_malloc_linux.cpp.o
    #1 0xc5f9fc in xrealloc__ /workspace/ovs/lib/util.c:147:9
    #2 0xc5f9fc in xrealloc /workspace/ovs/lib/util.c:179:12
    #3 0x86845d in ds_reserve /workspace/ovs/lib/dynamic-string.c:63:22
    #4 0x86954a in ds_put_format_valist /workspace/ovs/lib/dynamic-string.c:164:9
    #5 0x869202 in ds_put_format /workspace/ovs/lib/dynamic-string.c:142:5
    #6 0x7dc664 in ct_dpif_parse_tuple /workspace/ovs/lib/ct-dpif.c
    #7 0xebb089 in dpctl_flush_conntrack /workspace/ovs/lib/dpctl.c:1717:17
    #8 0xeb4eb2 in dpctl_unixctl_handler /workspace/ovs/lib/dpctl.c:3035:17
    #9 0xc5d4f8 in process_command /workspace/ovs/lib/unixctl.c:310:13
    #10 0xc5d4f8 in run_connection /workspace/ovs/lib/unixctl.c:344:17
    #11 0xc5d4f8 in unixctl_server_run /workspace/ovs/lib/unixctl.c:395:21
    #12 0x5a643f in main /workspace/ovs/vswitchd/ovs-vswitchd.c:130:9

Signed-off-by: Ales Musil <amusil@redhat.com>
---
 lib/dpctl.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/lib/dpctl.c b/lib/dpctl.c
index 29041fa3e..742fbce2d 100644
--- a/lib/dpctl.c
+++ b/lib/dpctl.c
@@ -1727,26 +1727,23 @@  dpctl_flush_conntrack(int argc, const char *argv[],
 
     /* Report error if there are more than one unparsed argument. */
     if (args > 1) {
-        ds_put_cstr(&ds, "invalid arguments");
         error = EINVAL;
-        goto error;
+        dpctl_error(dpctl_p, error, "invalid arguments: %s", ds_cstr(&ds));
+        goto out;
     }
 
     error = opt_dpif_open(argc, argv, dpctl_p, 4, &dpif);
     if (error) {
-        return error;
+        goto out;
     }
 
     error = ct_dpif_flush(dpif, pzone, ptuple);
-    if (!error) {
-        dpif_close(dpif);
-        return 0;
-    } else {
-        ds_put_cstr(&ds, "failed to flush conntrack");
+    if (error) {
+        dpctl_error(dpctl_p, error, "failed to flush conntrack: %s",
+                    ds_cstr(&ds));
     }
 
-error:
-    dpctl_error(dpctl_p, error, "%s", ds_cstr(&ds));
+out:
     ds_destroy(&ds);
     dpif_close(dpif);
     return error;