ifupdown: close memory leak
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Apr 2019 15:55:27 +0000 (17:55 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Apr 2019 15:55:27 +0000 (17:55 +0200)
function                                             old     new   delta
execute_all                                           80      91     +11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ifupdown.c

index 8a6efc97684b01f739e0abe999c7d5895d006965..5327b09793aa441a47396fc89172803ac1b5416e 100644 (file)
@@ -1177,8 +1177,15 @@ static int doit(char *str)
 
 static int execute_all(struct interface_defn_t *ifd, const char *opt)
 {
+       /* 'opt' is always short, the longest value is "post-down".
+        * Can use on-stack buffer instead of xasprintf'ed one.
+        */
+       char buf[sizeof("run-parts /etc/network/if-%s.d")
+               + sizeof("post-down")
+               /*paranoia:*/ + 8
+       ];
        int i;
-       char *buf;
+
        for (i = 0; i < ifd->n_options; i++) {
                if (strcmp(ifd->option[i].name, opt) == 0) {
                        if (!doit(ifd->option[i].value)) {
@@ -1192,8 +1199,7 @@ static int execute_all(struct interface_defn_t *ifd, const char *opt)
         * complains, and this message _is_ annoyingly visible.
         * Don't "fix" this (unless newer Debian does).
         */
-       buf = xasprintf("run-parts /etc/network/if-%s.d", opt);
-       /* heh, we don't bother free'ing it */
+       sprintf(buf, "run-parts /etc/network/if-%s.d", opt);
        return doit(buf);
 }