If S_IFIFO is passed to mknod(2), invoke kern_mkfifoat(9) to create a

FIFO, as required by SUSv3.  No specific privilege check is performed
in this case, as FIFOs may be created by unprivileged processes
(subject to the normal file system name space restrictions that may be
in place).

Unlike the Apple implementation, we reject requests to create a FIFO
using mknod(2) if there is a non-zero dev argument to the system call,
which is permitted by the Open Group specification ("... undefined
...").  We might want to revise this if we find it causes
compatibility problems for applications in practice.

PR:		kern/74242, kern/68459
Obtained from:	Apple, Inc.
MFC after:	3 weeks
This commit is contained in:
Robert Watson 2008-06-22 21:51:32 +00:00
parent b6365f959c
commit 3319d71265

View File

@ -1264,6 +1264,10 @@ kern_mknodat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
case S_IFWHT:
error = priv_check(td, PRIV_VFS_MKNOD_WHT);
break;
case S_IFIFO:
if (dev == 0)
return (kern_mkfifoat(td, fd, path, pathseg, mode));
/* FALLTHROUGH */
default:
error = EINVAL;
break;