OSDN Git Service

slirp: fix slirp_add_exec() leaks
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Sat, 10 Nov 2018 13:45:44 +0000 (17:45 +0400)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sun, 13 Jan 2019 23:40:54 +0000 (00:40 +0100)
Free the list elements allocated in add_exec().

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
slirp/misc.h
slirp/slirp.c

index 9482972..0bc5e74 100644 (file)
@@ -12,7 +12,7 @@ struct ex_list {
        void *ex_chardev;
        struct in_addr ex_addr;         /* Server address */
        int ex_fport;                   /* Port to telnet to */
-       const char *ex_exec;            /* Command line of what to exec */
+       char *ex_exec;                  /* Command line of what to exec */
        struct ex_list *ex_next;
 };
 
index ab08694..1627436 100644 (file)
@@ -342,6 +342,14 @@ Slirp *slirp_init(int restricted, bool in_enabled, struct in_addr vnetwork,
 
 void slirp_cleanup(Slirp *slirp)
 {
+    struct ex_list *e, *next;
+
+    for (e = slirp->exec_list; e; e = next) {
+        next = e->ex_next;
+        g_free(e->ex_exec);
+        g_free(e);
+    }
+
     QTAILQ_REMOVE(&slirp_instances, slirp, entry);
 
     unregister_savevm(NULL, "slirp", slirp);