From 6654fbcb3b5f4e137cedc951e83cc244c106455b Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Thu, 27 Nov 2003 19:57:37 +0000 Subject: [PATCH] Fix a DOS in rfork(). Disallow kernel-only flags. Taken-from: FreeBSD-4.x kern_fork.c 1.72.2.16 and unistd.h 1.22.2.3 --- sys/kern/kern_fork.c | 6 +++++- sys/sys/unistd.h | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 841a377f12..cd57b0bf91 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -37,7 +37,7 @@ * * @(#)kern_fork.c 8.6 (Berkeley) 4/8/94 * $FreeBSD: src/sys/kern/kern_fork.c,v 1.72.2.13 2003/06/06 20:21:32 tegge Exp $ - * $DragonFly: src/sys/kern/kern_fork.c,v 1.16 2003/11/05 23:26:20 dillon Exp $ + * $DragonFly: src/sys/kern/kern_fork.c,v 1.17 2003/11/27 19:57:37 dillon Exp $ */ #include "opt_ktrace.h" @@ -124,6 +124,10 @@ rfork(struct rfork_args *uap) struct proc *p2; int error; + /* Don't allow kernel only flags */ + if ((uap->flags & RFKERNELONLY) != 0) + return (EINVAL); + error = fork1(p, uap->flags, &p2); if (error == 0) { start_forked_proc(p, p2); diff --git a/sys/sys/unistd.h b/sys/sys/unistd.h index 1a60823727..76ce150bde 100644 --- a/sys/sys/unistd.h +++ b/sys/sys/unistd.h @@ -32,7 +32,7 @@ * * @(#)unistd.h 8.2 (Berkeley) 1/7/94 * $FreeBSD: src/sys/sys/unistd.h,v 1.22.2.2 2000/08/22 01:46:30 jhb Exp $ - * $DragonFly: src/sys/sys/unistd.h,v 1.2 2003/06/17 04:28:59 dillon Exp $ + * $DragonFly: src/sys/sys/unistd.h,v 1.3 2003/11/27 19:57:36 dillon Exp $ */ #ifndef _SYS_UNISTD_H_ @@ -219,6 +219,8 @@ #define RFSIGSHARE (1<<14) /* share signal handlers */ #define RFLINUXTHPN (1<<16) /* do linux clone exit parent notification */ #define RFPPWAIT (1<<31) /* parent sleeps until child exits (vfork) */ +#define RFKERNELONLY RFPPWAIT + #endif /* !_POSIX_SOURCE */ -- 2.41.0