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