]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
proc-cmdline: fix return value clobbering in proc_cmdline_get_key()
authorLennart Poettering <lennart@poettering.net>
Wed, 20 May 2020 17:17:44 +0000 (19:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 20 May 2020 17:17:44 +0000 (19:17 +0200)
Let's make sure proc_cmdline_get_key() follows our coding style: never
clobber return values on failure, and always initialize on success.

src/basic/proc-cmdline.c

index d8d30b0f1df44a93c3572a2fc80ee385fe8a7f80..1bc884c20d5399b00e978d982e07cee977528977 100644 (file)
@@ -218,7 +218,7 @@ static int cmdline_get_key(const char *line, const char *key, ProcCmdlineFlags f
 }
 
 int proc_cmdline_get_key(const char *key, ProcCmdlineFlags flags, char **ret_value) {
-        _cleanup_free_ char *line = NULL;
+        _cleanup_free_ char *line = NULL, *v = NULL;
         int r;
 
         /* Looks for a specific key on the kernel command line and (with lower priority) the EFI variable.
@@ -245,14 +245,24 @@ int proc_cmdline_get_key(const char *key, ProcCmdlineFlags flags, char **ret_val
         if (r < 0)
                 return r;
 
-        r = cmdline_get_key(line, key, flags, ret_value);
-        if (r != 0) /* Either error or true if found. */
+        r = cmdline_get_key(line, key, flags, ret_value ? &v : NULL);
+        if (r < 0)
                 return r;
+        if (r > 0) {
+                if (ret_value)
+                        *ret_value = TAKE_PTR(v);
+
+                return r;
+        }
 
         line = mfree(line);
         r = systemd_efi_options_variable(&line);
-        if (r == -ENODATA)
+        if (r == -ENODATA) {
+                if (ret_value)
+                        *ret_value = NULL;
+
                 return false; /* Not found */
+        }
         if (r < 0)
                 return r;