From 9f7845ae22bcdb79366ed42ea6d0eba0bbb6c8d6 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Fri, 11 Nov 2022 14:58:02 +0100 Subject: [PATCH] Don't crash if the client argv or argv[0] is NULL. Report from bauerm at pestilenz dot org. Part-of: --- os/client.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/os/client.c b/os/client.c index fe2ecaa38..15715994c 100644 --- a/os/client.c +++ b/os/client.c @@ -327,18 +327,26 @@ DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) if (n != 1) return; argv = kvm_getargv(kd, kp, 0); - *cmdname = strdup(argv[0]); - i = 1; - while (argv[i] != NULL) { - len += strlen(argv[i]) + 1; - i++; + if (cmdname) { + if (argv == NULL || argv[0] == NULL) { + *cmdname = strdup(""); + return; + } else + *cmdname = strdup(argv[0]); } - *cmdargs = calloc(1, len); - i = 1; - while (argv[i] != NULL) { - strlcat(*cmdargs, argv[i], len); - strlcat(*cmdargs, " ", len); - i++; + if (cmdargs) { + i = 1; + while (argv[i] != NULL) { + len += strlen(argv[i]) + 1; + i++; + } + *cmdargs = calloc(1, len); + i = 1; + while (argv[i] != NULL) { + strlcat(*(char **)cmdargs, argv[i], len); + strlcat(*(char **)cmdargs, " ", len); + i++; + } } kvm_close(kd); }