Module Name: src Committed By: martin Date: Mon Dec 18 14:06:44 UTC 2023
Modified Files: src/external/bsd/top/dist/machine [netbsd-10]: m_netbsd.c Log Message: Pull up following revision(s) (requested by mrg in ticket #502): external/bsd/top/dist/machine/m_netbsd.c: revision 1.29 avoid crashes when proc_from_thread() returns NULL. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.26.2.1 src/external/bsd/top/dist/machine/m_netbsd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/top/dist/machine/m_netbsd.c diff -u src/external/bsd/top/dist/machine/m_netbsd.c:1.26 src/external/bsd/top/dist/machine/m_netbsd.c:1.26.2.1 --- src/external/bsd/top/dist/machine/m_netbsd.c:1.26 Fri Jul 15 06:39:06 2022 +++ src/external/bsd/top/dist/machine/m_netbsd.c Mon Dec 18 14:06:44 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: m_netbsd.c,v 1.26 2022/07/15 06:39:06 mrg Exp $ */ +/* $NetBSD: m_netbsd.c,v 1.26.2.1 2023/12/18 14:06:44 martin Exp $ */ /* * top - a top users display for Unix @@ -37,12 +37,12 @@ * Andrew Doran <a...@netbsd.org> * * - * $Id: m_netbsd.c,v 1.26 2022/07/15 06:39:06 mrg Exp $ + * $Id: m_netbsd.c,v 1.26.2.1 2023/12/18 14:06:44 martin Exp $ */ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: m_netbsd.c,v 1.26 2022/07/15 06:39:06 mrg Exp $"); +__RCSID("$NetBSD: m_netbsd.c,v 1.26.2.1 2023/12/18 14:06:44 martin Exp $"); #endif #include <sys/param.h> @@ -762,18 +762,20 @@ get_lwp_info(struct system_info *si, str * status field. threads with L_SYSTEM set are system * threads---these get ignored unless show_sysprocs is set. */ - if (lp->l_stat != 0 && (show_system || ((lp->l_flag & LW_SYSTEM) == 0))) { + if (lp->l_stat != 0 && + (show_system || ((lp->l_flag & LW_SYSTEM) == 0))) { total_lwps++; process_states[(unsigned char) lp->l_stat]++; if (lp->l_stat != LSZOMB && (show_idle || (lp->l_pctcpu != 0) || - (lp->l_stat == LSRUN || lp->l_stat == LSONPROC)) && + (lp->l_stat == LSRUN || lp->l_stat == LSONPROC)) && (!show_uid || uid_from_thread(lp) == sel->uid) && (!show_command || - strstr(get_command(sel, proc_from_thread(lp)), - show_command) != NULL)) { - *lrefp++ = lp; - active_lwps++; + ((pp = proc_from_thread(lp)) != NULL && + strstr(get_command(sel, pp), + show_command) != NULL))) { + *lrefp++ = lp; + active_lwps++; } } } @@ -1152,6 +1154,8 @@ compare_pid(pp1, pp2) struct kinfo_lwp *l2 = *(struct kinfo_lwp **) pp2; struct kinfo_proc2 *p1 = proc_from_thread(l1); struct kinfo_proc2 *p2 = proc_from_thread(l2); + if (p1 == NULL || p2 == NULL) + return -1; return p2->p_pid - p1->p_pid; } else { struct kinfo_proc2 *p1 = *(struct kinfo_proc2 **) pp1; @@ -1169,6 +1173,8 @@ compare_command(pp1, pp2) struct kinfo_lwp *l2 = *(struct kinfo_lwp **) pp2; struct kinfo_proc2 *p1 = proc_from_thread(l1); struct kinfo_proc2 *p2 = proc_from_thread(l2); + if (p1 == NULL || p2 == NULL) + return -1; return strcmp(p2->p_comm, p1->p_comm); } else { struct kinfo_proc2 *p1 = *(struct kinfo_proc2 **) pp1; @@ -1186,6 +1192,8 @@ compare_username(pp1, pp2) struct kinfo_lwp *l2 = *(struct kinfo_lwp **) pp2; struct kinfo_proc2 *p1 = proc_from_thread(l1); struct kinfo_proc2 *p2 = proc_from_thread(l2); + if (p1 == NULL || p2 == NULL) + return -1; return strcmp(p2->p_login, p1->p_login); } else { struct kinfo_proc2 *p1 = *(struct kinfo_proc2 **) pp1;