summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_fork.c
diff options
context:
space:
mode:
authortegge <tegge@FreeBSD.org>2003-02-15 22:43:05 +0000
committertegge <tegge@FreeBSD.org>2003-02-15 22:43:05 +0000
commitf360480a6898bcaa82e7208ccaada23eed75ec60 (patch)
treeb8fc43179ec725ae6a10c79cff344462bcda2b98 /sys/kern/kern_fork.c
parent6db4854a46ecff5ef74e282dbd82f8db4e62abd2 (diff)
downloadFreeBSD-src-f360480a6898bcaa82e7208ccaada23eed75ec60.zip
FreeBSD-src-f360480a6898bcaa82e7208ccaada23eed75ec60.tar.gz
Avoid file lock leakage when linuxthreads port or rfork is used:
- Mark the process leader as having an advisory lock - Check if process leader is marked as having advisory lock when closing file - Check that file is still open after lock has been obtained - Don't allow file descriptor table sharing between processes with different leaders PR: 10265 Reviewed by: alfred
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r--sys/kern/kern_fork.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index f84afa8..166f1c6 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -166,6 +166,13 @@ rfork(td, uap)
/* Don't allow kernel only flags. */
if ((uap->flags & RFKERNELONLY) != 0)
return (EINVAL);
+ /*
+ * Don't allow sharing of file descriptor table unless
+ * RFTHREAD flag is supplied
+ */
+ if ((uap->flags & (RFPROC | RFTHREAD | RFFDG | RFCFDG)) ==
+ RFPROC)
+ return(EINVAL);
mtx_lock(&Giant);
error = fork1(td, uap->flags, 0, &p2);
if (error == 0) {
OpenPOWER on IntegriCloud