From: ASOU Masato Subject: Display the details of COMMAND using the ps command from the kernel crash dump. To: tech@openbsd.org Cc: Masato ASOU Date: Mon, 22 Apr 2024 13:05:40 +0900 ok, comments? Before apply patch: $ doas ps axe -N /var/crash/bsd.0 -M /var/crash/bsd.0.core PID TT STAT TIME COMMAND 1 ?? S 0:00.00 (init) 68923 ?? IpU 0:00.00 (resolvd) 76890 ?? RpU 0:00.01 (dhcpleased) 46069 ?? Sp 0:00.00 (dhcpleased) 21951 ?? IU 0:00.01 (dhcpleased) 93421 ?? RpU 0:00.01 (slaacd) 90234 ?? Sp 0:00.01 (slaacd) 89330 ?? Sp 0:00.00 (slaacd) 20157 ?? S 0:00.01 (sshd) 75440 ?? S 0:00.03 (sshd) 21027 ?? Ip 0:00.00 (cron) 35439 ?? Ip_vmspace, &vm)) return (NULL); - addr = (u_long)&vm.vm_map.addr.rbh_root.rbt_root; + addr = (u_long)vm.vm_map.addr.rbh_root.rbt_root; while (1) { if (addr == 0) return (NULL); @@ -228,7 +228,7 @@ _kvm_ureadm(kvm_t *kd, const struct kinf return (NULL); if (_kvm_pread(kd, kd->pmfd, (void *)kd->swapspc, - (size_t)kd->nbpg, (off_t)pg.phys_addr) != kd->nbpg) + (size_t)kd->nbpg, _kvm_pa2off(kd, pg.phys_addr)) != kd->nbpg) return (NULL); } else { if (kd->swfd == -1 || @@ -432,21 +432,20 @@ static char ** kvm_doargv(kvm_t *kd, const struct kinfo_proc *p, int nchr, int isenv, void (*info)(struct ps_strings *, u_long *, int *)) { - static struct ps_strings *ps; + struct proc pp; + struct process pr; + struct ps_strings *ps; struct ps_strings arginfo; u_long addr; char **ap; int cnt; - if (ps == NULL) { - struct _ps_strings _ps; - const int mib[2] = { CTL_VM, VM_PSSTRINGS }; - size_t len; - - len = sizeof(_ps); - sysctl(mib, 2, &_ps, &len, NULL, 0); - ps = (struct ps_strings *)_ps.val; - } + /* get ps_strings address */ + if (KREAD(kd, (u_long)p->p_paddr, &pp)) + return (0); + if (KREAD(kd, (u_long)pp.p_p, &pr)) + return (0); + ps = (struct ps_strings *)pr.ps_strings; /* * Pointers are stored at the top of the user stack.