Module Name: src Committed By: martin Date: Wed Aug 7 10:04:48 UTC 2024
Modified Files: src/lib/libc/compat-43 [netbsd-10]: killpg.c src/sys/kern [netbsd-10]: kern_descrip.c kern_ktrace.c kern_proc.c sys_sig.c tty.c src/tests/lib/libc/sys [netbsd-10]: t_kill.c Log Message: Pull up following revision(s) (requested by kre in ticket #773): sys/kern/kern_proc.c: revision 1.276 sys/kern/kern_ktrace.c: revision 1.185 sys/kern/sys_sig.c: revision 1.58 sys/kern/kern_descrip.c: revision 1.263 lib/libc/compat-43/killpg.c: revision 1.10 sys/kern/tty.c: revision 1.313 tests/lib/libc/sys/t_kill.c: revision 1.2 PR kern/58425 -- Disallow INT_MIN as a (negative) pid arg. Since -INT_MIN is undefined, and to point of negative pid args is to negate them, and use the result as a pgrp id instead, we need to avoid accidentally negating INT_MIN. Since pid_t is just an integral type, of unspecified width, when testing pid_t value test for <= INT_MIN (or > INT_MIN sometimes) rather than == INT_MIN. When testing int values, just == INT_MIN is all that is needed, < INT_MIN cannot occur. tests/lib/libc/sys/t_kill: Test kill(INT_MIN, ...) fails with ESRCH. PR kern/58425 To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.9.14.1 src/lib/libc/compat-43/killpg.c cvs rdiff -u -r1.251.10.1 -r1.251.10.2 src/sys/kern/kern_descrip.c cvs rdiff -u -r1.182 -r1.182.4.1 src/sys/kern/kern_ktrace.c cvs rdiff -u -r1.269 -r1.269.2.1 src/sys/kern/kern_proc.c cvs rdiff -u -r1.56 -r1.56.4.1 src/sys/kern/sys_sig.c cvs rdiff -u -r1.307 -r1.307.2.1 src/sys/kern/tty.c cvs rdiff -u -r1.1 -r1.1.56.1 src/tests/lib/libc/sys/t_kill.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/libc/compat-43/killpg.c diff -u src/lib/libc/compat-43/killpg.c:1.9 src/lib/libc/compat-43/killpg.c:1.9.14.1 --- src/lib/libc/compat-43/killpg.c:1.9 Thu Jan 4 20:57:28 2018 +++ src/lib/libc/compat-43/killpg.c Wed Aug 7 10:04:48 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: killpg.c,v 1.9 2018/01/04 20:57:28 kamil Exp $ */ +/* $NetBSD: killpg.c,v 1.9.14.1 2024/08/07 10:04:48 martin Exp $ */ /* * Copyright (c) 1989, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)killpg.c 8.1 (Berkeley) 6/2/93"; #else -__RCSID("$NetBSD: killpg.c,v 1.9 2018/01/04 20:57:28 kamil Exp $"); +__RCSID("$NetBSD: killpg.c,v 1.9.14.1 2024/08/07 10:04:48 martin Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -43,6 +43,7 @@ __RCSID("$NetBSD: killpg.c,v 1.9 2018/01 #include <sys/types.h> #include <signal.h> #include <errno.h> +#include <limits.h> /* * Backwards-compatible killpg(). @@ -50,7 +51,7 @@ __RCSID("$NetBSD: killpg.c,v 1.9 2018/01 int killpg(pid_t pgid, int sig) { - if (pgid == 1) { + if (pgid == 1 || pgid <= INT_MIN) { errno = ESRCH; return (-1); } Index: src/sys/kern/kern_descrip.c diff -u src/sys/kern/kern_descrip.c:1.251.10.1 src/sys/kern/kern_descrip.c:1.251.10.2 --- src/sys/kern/kern_descrip.c:1.251.10.1 Sun Jul 30 12:09:51 2023 +++ src/sys/kern/kern_descrip.c Wed Aug 7 10:04:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_descrip.c,v 1.251.10.1 2023/07/30 12:09:51 martin Exp $ */ +/* $NetBSD: kern_descrip.c,v 1.251.10.2 2024/08/07 10:04:47 martin Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.251.10.1 2023/07/30 12:09:51 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.251.10.2 2024/08/07 10:04:47 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1819,7 +1819,7 @@ fsetown(pid_t *pgid, u_long cmd, const v pid_t id = *(const pid_t *)data; int error; - if (id == INT_MIN) + if (id <= INT_MIN) return EINVAL; switch (cmd) { @@ -1868,6 +1868,7 @@ fgetown(pid_t pgid, u_long cmd, void *da switch (cmd) { case TIOCGPGRP: + KASSERT(pgid > INT_MIN); *(int *)data = -pgid; break; default: @@ -1907,7 +1908,7 @@ fownsignal(pid_t pgid, int signo, int co } else { struct pgrp *pgrp; - KASSERT(pgid < 0); + KASSERT(pgid < 0 && pgid > INT_MIN); pgrp = pgrp_find(-pgid); if (pgrp != NULL) { kpgsignal(pgrp, &ksi, fdescdata, 0); Index: src/sys/kern/kern_ktrace.c diff -u src/sys/kern/kern_ktrace.c:1.182 src/sys/kern/kern_ktrace.c:1.182.4.1 --- src/sys/kern/kern_ktrace.c:1.182 Fri Jul 1 01:07:56 2022 +++ src/sys/kern/kern_ktrace.c Wed Aug 7 10:04:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_ktrace.c,v 1.182 2022/07/01 01:07:56 riastradh Exp $ */ +/* $NetBSD: kern_ktrace.c,v 1.182.4.1 2024/08/07 10:04:47 martin Exp $ */ /*- * Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_ktrace.c,v 1.182 2022/07/01 01:07:56 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_ktrace.c,v 1.182.4.1 2024/08/07 10:04:47 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1095,7 +1095,10 @@ ktrace_common(lwp_t *curl, int ops, int /* * by process group */ - pg = pgrp_find(-pid); + if (pid == INT_MIN) + pg = NULL; + else + pg = pgrp_find(-pid); if (pg == NULL) error = ESRCH; else { Index: src/sys/kern/kern_proc.c diff -u src/sys/kern/kern_proc.c:1.269 src/sys/kern/kern_proc.c:1.269.2.1 --- src/sys/kern/kern_proc.c:1.269 Wed Oct 26 23:20:36 2022 +++ src/sys/kern/kern_proc.c Wed Aug 7 10:04:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_proc.c,v 1.269 2022/10/26 23:20:36 riastradh Exp $ */ +/* $NetBSD: kern_proc.c,v 1.269.2.1 2024/08/07 10:04:47 martin Exp $ */ /*- * Copyright (c) 1999, 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc. @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.269 2022/10/26 23:20:36 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.269.2.1 2024/08/07 10:04:47 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_kstack.h" @@ -627,7 +627,7 @@ pgid_in_session(struct proc *p, pid_t pg struct session *session; int error; - if (pg_id == INT_MIN) + if (pg_id <= INT_MIN) return EINVAL; mutex_enter(&proc_lock); Index: src/sys/kern/sys_sig.c diff -u src/sys/kern/sys_sig.c:1.56 src/sys/kern/sys_sig.c:1.56.4.1 --- src/sys/kern/sys_sig.c:1.56 Thu Apr 21 21:31:11 2022 +++ src/sys/kern/sys_sig.c Wed Aug 7 10:04:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_sig.c,v 1.56 2022/04/21 21:31:11 andvar Exp $ */ +/* $NetBSD: sys_sig.c,v 1.56.4.1 2024/08/07 10:04:47 martin Exp $ */ /*- * Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 1.56 2022/04/21 21:31:11 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 1.56.4.1 2024/08/07 10:04:47 martin Exp $"); #include "opt_dtrace.h" @@ -272,6 +272,8 @@ kill1(struct lwp *l, pid_t pid, ksiginfo case 0: /* signal own process group */ return killpg1(l, ksi, 0, 0); default: /* negative explicit process group */ + if (pid <= INT_MIN) + return ESRCH; return killpg1(l, ksi, -pid, 0); } /* NOTREACHED */ Index: src/sys/kern/tty.c diff -u src/sys/kern/tty.c:1.307 src/sys/kern/tty.c:1.307.2.1 --- src/sys/kern/tty.c:1.307 Wed Oct 26 23:41:49 2022 +++ src/sys/kern/tty.c Wed Aug 7 10:04:47 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.c,v 1.307 2022/10/26 23:41:49 riastradh Exp $ */ +/* $NetBSD: tty.c,v 1.307.2.1 2024/08/07 10:04:47 martin Exp $ */ /*- * Copyright (c) 2008, 2020 The NetBSD Foundation, Inc. @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.307 2022/10/26 23:41:49 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.307.2.1 2024/08/07 10:04:47 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1421,7 +1421,7 @@ unlock_constty: mutex_exit(&constty_lock } if (pgid < 0) { - if (pgid == INT_MIN) { + if (pgid <= INT_MIN) { mutex_exit(&proc_lock); return (EINVAL); } Index: src/tests/lib/libc/sys/t_kill.c diff -u src/tests/lib/libc/sys/t_kill.c:1.1 src/tests/lib/libc/sys/t_kill.c:1.1.56.1 --- src/tests/lib/libc/sys/t_kill.c:1.1 Thu Jul 7 06:57:53 2011 +++ src/tests/lib/libc/sys/t_kill.c Wed Aug 7 10:04:48 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: t_kill.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $ */ +/* $NetBSD: t_kill.c,v 1.1.56.1 2024/08/07 10:04:48 martin Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: t_kill.c,v 1.1 2011/07/07 06:57:53 jruoho Exp $"); +__RCSID("$NetBSD: t_kill.c,v 1.1.56.1 2024/08/07 10:04:48 martin Exp $"); #include <sys/wait.h> @@ -299,6 +299,18 @@ ATF_TC_BODY(kill_pgrp_zero, tc) atf_tc_fail("failed to kill(2) a process group"); } +ATF_TC(kill_int_min); +ATF_TC_HEAD(kill_int_min, tc) +{ + atf_tc_set_md_var(tc, "descr", "Test kill(INT_MIN) fails with ESRCH"); +} + +ATF_TC_BODY(kill_int_min, tc) +{ + + ATF_CHECK_ERRNO(ESRCH, kill(INT_MIN, 0)); +} + ATF_TP_ADD_TCS(tp) { @@ -307,6 +319,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, kill_perm); ATF_TP_ADD_TC(tp, kill_pgrp_neg); ATF_TP_ADD_TC(tp, kill_pgrp_zero); + ATF_TP_ADD_TC(tp, kill_int_min); return atf_no_error(); }