From: Marc-André Lureau Date: Sat, 10 Nov 2018 13:45:44 +0000 (+0400) Subject: slirp: fix slirp_add_exec() leaks X-Git-Tag: v4.0.0-rc0~163^2~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c27f247865d7e1910136b57a5c066737ab1bf2bb;p=thirdparty%2Fqemu.git slirp: fix slirp_add_exec() leaks Free the list elements allocated in add_exec(). Signed-off-by: Marc-André Lureau Signed-off-by: Samuel Thibault --- diff --git a/slirp/misc.h b/slirp/misc.h index 94829722cd0..0bc5e74bc59 100644 --- a/slirp/misc.h +++ b/slirp/misc.h @@ -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; }; diff --git a/slirp/slirp.c b/slirp/slirp.c index ab08694e379..1627436e7dd 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -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);