Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Jun 1997 20:10:01 -0700 (PDT)
From:      Bruce Evans <bde@zeta.org.au>
To:        freebsd-bugs
Subject:   Re: kern/3838: fifos on nfs-mounted fs no longer permitted
Message-ID:  <199706110310.UAA24392@hub.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/3838; it has been noted by GNATS.

From: Bruce Evans <bde@zeta.org.au>
To: admin@citylink.dinoex.sub.org, FreeBSD-gnats-submit@freebsd.org
Cc: dfr@freebsd.org
Subject: Re: kern/3838: fifos on nfs-mounted fs no longer permitted
Date: Wed, 11 Jun 1997 12:54:13 +1000

 >mkfifo on a nfs-mounted filesystem will reply: "operation not permitted".
 >This didn't happen with release 2.1.0. (No, the fs isn't mounted with
 >nodev!)
 
 This was broken in the initial v3 import (rev.1.16), which is essentially
 the same as Lite2.  There are several bugs:
 
 1. In the v2 case, nfsrv_create() lost some special handling for fifos.
    suser() is always called, although mkfifo doesn't require special
    privileges.
 2. In the v3 case, the new nfsrv_mknod() never had enough special handling
    for fifos.  suser() is always called, except for sockets.
 3. In the v3 case, after suser() fails, the error code is eventually
    thrown away.  nfsrv_mknod() returns 0, and mkfifo() returns the bogus
    errno EIO.
 
 Bruce
 
 Untested fixes for (1)-(2):
 
 diff -c2 nfs_serv.c~ nfs_serv.c
 *** nfs_serv.c~	Wed Jun  4 11:38:41 1997
 --- nfs_serv.c	Wed Jun 11 12:43:03 1997
 ***************
 *** 1428,1432 ****
   			if (vap->va_type == VCHR && rdev == 0xffffffff)
   				vap->va_type = VFIFO;
 ! 			if (error = suser(cred, (u_short *)0)) {
   				vrele(nd.ni_startdir);
   				free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
 --- 1427,1432 ----
   			if (vap->va_type == VCHR && rdev == 0xffffffff)
   				vap->va_type = VFIFO;
 ! 			if (vap->va_type == VFIFO &&
 ! 			    (error = suser(cred, (u_short *)0))) {
   				vrele(nd.ni_startdir);
   				free(nd.ni_cnd.cn_pnbuf, M_NAMEI);
 ***************
 *** 1622,1626 ****
   			FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
   	} else {
 ! 		if (error = suser(cred, (u_short *)0)) {
   			vrele(nd.ni_startdir);
   			free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);
 --- 1624,1628 ----
   			FREE(nd.ni_cnd.cn_pnbuf, M_NAMEI);
   	} else {
 ! 		if (vtyp != VFIFO && (error = suser(cred, (u_short *)0))) {
   			vrele(nd.ni_startdir);
   			free((caddr_t)nd.ni_cnd.cn_pnbuf, M_NAMEI);



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