From: Lennart Poettering Date: Wed, 20 May 2020 17:17:44 +0000 (+0200) Subject: proc-cmdline: fix return value clobbering in proc_cmdline_get_key() X-Git-Tag: v246-rc1~313^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b5ee5901caa4cecefd333462660956d67ed2975;p=thirdparty%2Fsystemd.git proc-cmdline: fix return value clobbering in proc_cmdline_get_key() Let's make sure proc_cmdline_get_key() follows our coding style: never clobber return values on failure, and always initialize on success. --- diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c index d8d30b0f1df..1bc884c20d5 100644 --- a/src/basic/proc-cmdline.c +++ b/src/basic/proc-cmdline.c @@ -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;