Module Name: src
Committed By: christos
Date: Mon Jan 10 20:04:01 UTC 2022
Modified Files:
src/lib/libkvm: kvm_proc.c
Log Message:
read the ps arguments from the correct place.
To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/lib/libkvm/kvm_proc.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libkvm/kvm_proc.c
diff -u src/lib/libkvm/kvm_proc.c:1.96 src/lib/libkvm/kvm_proc.c:1.97
--- src/lib/libkvm/kvm_proc.c:1.96 Mon Jan 10 14:51:30 2022
+++ src/lib/libkvm/kvm_proc.c Mon Jan 10 15:04:01 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: kvm_proc.c,v 1.96 2022/01/10 19:51:30 christos Exp $ */
+/* $NetBSD: kvm_proc.c,v 1.97 2022/01/10 20:04:01 christos Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
#if 0
static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93";
#else
-__RCSID("$NetBSD: kvm_proc.c,v 1.96 2022/01/10 19:51:30 christos Exp $");
+__RCSID("$NetBSD: kvm_proc.c,v 1.97 2022/01/10 20:04:01 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -118,6 +118,7 @@ __RCSID("$NetBSD: kvm_proc.c,v 1.96 2022
struct miniproc {
struct vmspace *p_vmspace;
char p_stat;
+ vaddr_t p_psstrp;
struct proc *p_paddr;
pid_t p_pid;
};
@@ -131,6 +132,7 @@ struct miniproc {
(p)->p_pid = (kp)->p_pid; \
(p)->p_paddr = NULL; \
(p)->p_vmspace = (kp)->p_vmspace; \
+ (p)->p_psstrp = (kp)->p_psstrp; \
} while (/*CONSTCOND*/0);
#define KPTOMINI(kp, p) \
@@ -1057,7 +1059,6 @@ proc_verify(kvm_t *kd, u_long kernp, con
(kernproc.p_stat != SZOMB || p->p_stat == SZOMB));
}
-extern struct ps_strings *__ps_strings;
static char **
kvm_doargv(kvm_t *kd, const struct miniproc *p, int nchr,
void (*info)(struct ps_strings *, u_long *, int *))
@@ -1072,8 +1073,7 @@ kvm_doargv(kvm_t *kd, const struct minip
*/
if (p->p_stat == SZOMB)
return (NULL);
- /* XXX: this is broken for ASLR: we need to read p->p_psstr instead */
- cnt = (int)kvm_ureadm(kd, p, (u_long)(intptr_t)__ps_strings,
+ cnt = (int)kvm_ureadm(kd, p, p->p_psstrp,
(void *)&arginfo, sizeof(arginfo));
if (cnt != sizeof(arginfo))
return (NULL);