On Tue, Nov 04, 2003, Igor Serikov wrote:
David,
Is it okay to have a condition that can be created by a mortal user and then cannot be changed by the root? The waiting process cannot be killed and would keep "waiting" till system reboot.
Aah, I see. No, it's not okay that a non-root user can create an
unkillable process. -CURRENT doesn't have this problem because it
rightly fails when a userland program tries to use RFPPWAIT. (It
isn't supposed to be available to userland, which is why it isn't
documented.) The problem could be fixed by backporting the
relevant bits from -CURRENT.
I do not think it is a good idea to make ppwait state uninterruptible in any case.
I do not think it would be safe to deliver a signal to a parent process while a vforked child is borrowing its address space.
Here's a patch against -STABLE:
Index: kern_fork.c =================================================================== RCS file: /cvs/src/sys/kern/kern_fork.c,v retrieving revision 1.72.2.15 diff -u -r1.72.2.15 kern_fork.c --- kern_fork.c 28 Sep 2003 11:08:31 -0000 1.72.2.15 +++ kern_fork.c 4 Nov 2003 19:13:33 -0000 @@ -130,6 +130,9 @@ int error; struct proc *p2;
+ /* Don't allow kernel only flags. */
+ if ((uap->flags & RFKERNELONLY) != 0)
+ return (EINVAL);
error = fork1(p, uap->flags, &p2);
if (error == 0) {
p->p_retval[0] = p2 ? p2->p_pid : 0;
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"
I don't think -STABLE defines RFKERNELONLY (or some of the other rfork flags), so you need to add
Index: unistd.h
===================================================================
RCS file: /pub/FreeBSD/development/FreeBSD-CVS/src/sys/sys/unistd.h,v
retrieving revision 1.22.2.2
diff -u -r1.22.2.2 unistd.h
--- unistd.h 22 Aug 2000 01:46:30 -0000 1.22.2.2
+++ unistd.h 4 Nov 2003 19:46:03 -0000
@@ -218,6 +218,7 @@
#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 */
_______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"