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);

Reply via email to