Module Name: src Committed By: kre Date: Sun Jul 14 05:10:40 UTC 2024
Modified Files: src/lib/libc/compat-43: killpg.c src/sys/kern: kern_descrip.c kern_ktrace.c kern_proc.c sys_sig.c tty.c Log Message: 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. XXX pullup -9, -10 To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/lib/libc/compat-43/killpg.c cvs rdiff -u -r1.262 -r1.263 src/sys/kern/kern_descrip.c cvs rdiff -u -r1.184 -r1.185 src/sys/kern/kern_ktrace.c cvs rdiff -u -r1.275 -r1.276 src/sys/kern/kern_proc.c cvs rdiff -u -r1.57 -r1.58 src/sys/kern/sys_sig.c cvs rdiff -u -r1.312 -r1.313 src/sys/kern/tty.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.10 --- src/lib/libc/compat-43/killpg.c:1.9 Thu Jan 4 20:57:28 2018 +++ src/lib/libc/compat-43/killpg.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: killpg.c,v 1.9 2018/01/04 20:57:28 kamil Exp $ */ +/* $NetBSD: killpg.c,v 1.10 2024/07/14 05:10:40 kre 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.10 2024/07/14 05:10:40 kre 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.262 src/sys/kern/kern_descrip.c:1.263 --- src/sys/kern/kern_descrip.c:1.262 Wed Oct 4 22:17:09 2023 +++ src/sys/kern/kern_descrip.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_descrip.c,v 1.262 2023/10/04 22:17:09 ad Exp $ */ +/* $NetBSD: kern_descrip.c,v 1.263 2024/07/14 05:10:40 kre Exp $ */ /*- * Copyright (c) 2008, 2009, 2023 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.262 2023/10/04 22:17:09 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_descrip.c,v 1.263 2024/07/14 05:10:40 kre Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1808,7 +1808,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) { @@ -1857,6 +1857,7 @@ fgetown(pid_t pgid, u_long cmd, void *da switch (cmd) { case TIOCGPGRP: + KASSERT(pgid > INT_MIN); *(int *)data = -pgid; break; default: @@ -1896,7 +1897,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.184 src/sys/kern/kern_ktrace.c:1.185 --- src/sys/kern/kern_ktrace.c:1.184 Tue Oct 17 10:27:34 2023 +++ src/sys/kern/kern_ktrace.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_ktrace.c,v 1.184 2023/10/17 10:27:34 riastradh Exp $ */ +/* $NetBSD: kern_ktrace.c,v 1.185 2024/07/14 05:10:40 kre 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.184 2023/10/17 10:27:34 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_ktrace.c,v 1.185 2024/07/14 05:10:40 kre Exp $"); #include <sys/param.h> @@ -1096,7 +1096,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.275 src/sys/kern/kern_proc.c:1.276 --- src/sys/kern/kern_proc.c:1.275 Sun Jun 2 12:11:35 2024 +++ src/sys/kern/kern_proc.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_proc.c,v 1.275 2024/06/02 12:11:35 andvar Exp $ */ +/* $NetBSD: kern_proc.c,v 1.276 2024/07/14 05:10:40 kre Exp $ */ /*- * Copyright (c) 1999, 2006, 2007, 2008, 2020, 2023 @@ -63,7 +63,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.275 2024/06/02 12:11:35 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_proc.c,v 1.276 2024/07/14 05:10:40 kre Exp $"); #ifdef _KERNEL_OPT #include "opt_kstack.h" @@ -628,7 +628,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.57 src/sys/kern/sys_sig.c:1.58 --- src/sys/kern/sys_sig.c:1.57 Wed Oct 4 20:42:38 2023 +++ src/sys/kern/sys_sig.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_sig.c,v 1.57 2023/10/04 20:42:38 ad Exp $ */ +/* $NetBSD: sys_sig.c,v 1.58 2024/07/14 05:10:40 kre 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.57 2023/10/04 20:42:38 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_sig.c,v 1.58 2024/07/14 05:10:40 kre 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.312 src/sys/kern/tty.c:1.313 --- src/sys/kern/tty.c:1.312 Thu Dec 7 09:00:32 2023 +++ src/sys/kern/tty.c Sun Jul 14 05:10:40 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: tty.c,v 1.312 2023/12/07 09:00:32 pgoyette Exp $ */ +/* $NetBSD: tty.c,v 1.313 2024/07/14 05:10:40 kre 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.312 2023/12/07 09:00:32 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tty.c,v 1.313 2024/07/14 05:10:40 kre Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1417,7 +1417,7 @@ unlock_constty: mutex_exit(&constty_lock } if (pgid < 0) { - if (pgid == INT_MIN) { + if (pgid <= INT_MIN) { mutex_exit(&proc_lock); return (EINVAL); }