Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Apr 2002 07:02:48 -0500
From:      "Jacques A. Vidrine" <nectar@FreeBSD.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        alfred@FreeBSD.org, phk@FreeBSD.org, Maxim Konovalov <maxim@macomnet.ru>, freebsd-current@FreeBSD.org, Adrian Penisoara <ady@freebsd.ady.ro>
Subject:   Re: panic:bremfree with today's current and linux-netscape
Message-ID:  <20020422120247.GD68403@madman.nectar.cc>
In-Reply-To: <20020422181848.G8032-100000@gamplex.bde.org>
References:  <20020421210807.T76833-100000@news1.macomnet.ru> <20020422181848.G8032-100000@gamplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Apr 22, 2002 at 06:25:17PM +1000, Bruce Evans wrote:
> On Sun, 21 Apr 2002, Maxim Konovalov wrote:
> 
> > As Adrian Penisoara already reported
> >
> > http://docs.freebsd.org/cgi/getmsg.cgi?fetch=19645+0+current/freebsd-current
> >
> > there is panic in -current. I believe it is related to the next
> > commit:
> >
> > nectar      2002/04/18 17:45:29 PDT
> >
> >   Modified files:
> >     sys/kern             kern_descrip.c kern_exec.c
> >     sys/sys              filedesc.h
> >   Log:
> >   When exec'ing a set[ug]id program, make sure that the stdio file descriptors
> >   (0, 1, 2) are allocated by opening /dev/null for any which are not already
> >   open.
> >
> >   Reviewed by:    alfred, phk
> >   MFC after:      2 days
> >
> > Here is my workaround but I am not sure is it correct or not. Seems
> > falloc() takes care about locking itself.
> >
> > Index: src/sys/kern/kern_descrip.c
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/kern/kern_descrip.c,v
> > retrieving revision 1.138
> > diff -u -r1.138 kern_descrip.c
> > --- src/sys/kern/kern_descrip.c	20 Apr 2002 12:02:52 -0000	1.138
> > +++ src/sys/kern/kern_descrip.c	21 Apr 2002 17:04:58 -0000
> > @@ -1528,9 +1528,7 @@
> >  		if (fdp->fd_ofiles[i] != NULL)
> >  			continue;
> >  		if (devnull < 0) {
> > -			FILEDESC_LOCK(fdp);
> >  			error = falloc(td, &fp, &fd);
> > -			FILEDESC_UNLOCK(fdp);
> >  			if (error != 0)
> >  				break;
> >  			NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, "/dev/null",
> >
> > %%%
> 
> I use the same patch.  Locking here is essentially equivalent to calling
> panic() here (except it gives a more confusing panic message :-).

:-)  That's a bit of an overstatement; my testing didn't catch it.  I
do see that falloc does lock the file descriptor table too, though ---
I wonder how it ever worked.

Bouncing to the previous reviewers to make sure that this is the
correct fix.  Comments alfred, phk?  Oh, especially Alfred --- it
seems you committed the delta that added locking to the file
descriptor table.

Meanwhile I'll see if I can reproduce.  I wonder if interaction with
the linuxlator is required to tickle the bug.

> I think opening file descriptors on exec is wrong anyway.  POSIX has
> close-on-exec but not open-on-exec.

Cheers,
-- 
Jacques A. Vidrine <n@nectar.cc>                 http://www.nectar.cc/
NTT/Verio SME          .     FreeBSD UNIX     .       Heimdal Kerberos
jvidrine@verio.net     .  nectar@FreeBSD.org  .          nectar@kth.se

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020422120247.GD68403>