mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-06-16 03:58:27 +02:00
os/client: fix kvm handle leak and NULL dereferences on OpenBSD
And remove a redundant argv == NULL check Co-Authored-by: Claude Code <noreply@anthropic.com> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2184>
This commit is contained in:
parent
f9a4614162
commit
ba04af58a5
1 changed files with 13 additions and 8 deletions
21
os/client.c
21
os/client.c
|
|
@ -321,11 +321,13 @@ DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs)
|
|||
kp = kvm_getprocs(kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc),
|
||||
&n);
|
||||
if (n != 1)
|
||||
return;
|
||||
goto done_kvm;
|
||||
argv = kvm_getargv(kd, kp, 0);
|
||||
if (argv == NULL)
|
||||
goto done_kvm;
|
||||
if (cmdname) {
|
||||
if (argv == NULL || argv[0] == NULL)
|
||||
return;
|
||||
if (argv[0] == NULL)
|
||||
goto done_kvm;
|
||||
else
|
||||
*cmdname = strdup(argv[0]);
|
||||
}
|
||||
|
|
@ -336,13 +338,16 @@ DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs)
|
|||
i++;
|
||||
}
|
||||
*cmdargs = calloc(1, len);
|
||||
i = 1;
|
||||
while (argv[i] != NULL) {
|
||||
strlcat(*(char **)cmdargs, argv[i], len);
|
||||
strlcat(*(char **)cmdargs, " ", len);
|
||||
i++;
|
||||
if (*cmdargs) {
|
||||
i = 1;
|
||||
while (argv[i] != NULL) {
|
||||
strlcat(*(char **)cmdargs, argv[i], len);
|
||||
strlcat(*(char **)cmdargs, " ", len);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
done_kvm:
|
||||
kvm_close(kd);
|
||||
}
|
||||
#else /* Linux using /proc/pid/cmdline */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue