chiark / gitweb /
modules-load: fix memory leak when bailing out
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 4 Dec 2012 12:57:53 +0000 (13:57 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 4 Dec 2012 13:03:40 +0000 (14:03 +0100)
Suggested-by: Mauro Dreissig <mukadr@gmail.com>
src/modules-load/modules-load.c

index e72e382e1919264758488d1789bf7ee7e2c81fbf..f6279e1975267b50645f72514cfcab5ada0b18c4 100644 (file)
@@ -64,7 +64,8 @@ static int add_modules(const char *p) {
 }
 
 static int parse_proc_cmdline(void) {
-        char *line, *w, *state;
+        char _cleanup_free_ *line = NULL;
+        char *w, *state;
         int r;
         size_t l;
 
@@ -78,38 +79,30 @@ static int parse_proc_cmdline(void) {
         }
 
         FOREACH_WORD_QUOTED(w, l, line, state) {
-                char *word;
+                char _cleanup_free_ *word;
 
                 word = strndup(w, l);
-                if (!word) {
-                        r = -ENOMEM;
-                        goto finish;
-                }
+                if (!word)
+                        return log_oom();
 
                 if (startswith(word, "modules-load=")) {
 
                         r = add_modules(word + 13);
                         if (r < 0)
-                                goto finish;
+                                return r;
 
                 } else if (startswith(word, "rd.modules-load=")) {
 
                         if (in_initrd()) {
                                 r = add_modules(word + 16);
                                 if (r < 0)
-                                        goto finish;
+                                        return r;
                         }
 
                 }
-
-                free(word);
         }
 
-        r = 0;
-
-finish:
-        free(line);
-        return r;
+        return 0;
 }
 
 static int load_module(struct kmod_ctx *ctx, const char *m) {