Sorry for garbled patch. I do not know why mutt decided to encode some "=" as =3D.
Index: compat/linux/linux_misc.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sys/compat/linux/linux_misc.c,v retrieving revision 1.172 diff -u -r1.172 linux_misc.c --- compat/linux/linux_misc.c 28 Dec 2005 07:08:54 -0000 1.172 +++ compat/linux/linux_misc.c 14 Mar 2006 11:45:57 -0000 @@ -310,6 +310,21 @@ * XXX: This should use vn_open() so that it is properly authorized, * and to reduce code redundancy all over the place here. */ + if (vp->v_type == VLNK) { + error = EMLINK; + goto cleanup; + } + if (vp->v_type == VSOCK) { + error = EOPNOTSUPP; + goto cleanup; + } + if (vp->v_type == VFIFO) { + /* Due to way fifo works (by overloading f_ops), + * tricking kernel into write to the fifo leads to + * panic. Make a band-aid to filter the case. */ + error = EOPNOTSUPP; + goto cleanup; + } #ifdef MAC error = mac_check_vnode_open(td->td_ucred, vp, FREAD); if (error) Index: fs/fifofs/fifo_vnops.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sys/fs/fifofs/fifo_vnops.c,v retrieving revision 1.132 diff -u -r1.132 fifo_vnops.c --- fs/fifofs/fifo_vnops.c 1 Oct 2005 20:15:41 -0000 1.132 +++ fs/fifofs/fifo_vnops.c 14 Mar 2006 11:46:07 -0000 @@ -168,6 +168,7 @@ int a_mode; struct ucred *a_cred; struct thread *a_td; + int a_fdidx; } */ *ap; { struct vnode *vp = ap->a_vp; Index: kern/vfs_syscalls.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.411 diff -u -r1.411 vfs_syscalls.c --- kern/vfs_syscalls.c 4 Mar 2006 00:09:09 -0000 1.411 +++ kern/vfs_syscalls.c 14 Mar 2006 11:46:10 -0000 @@ -4101,6 +4101,13 @@ error = EOPNOTSUPP; goto bad; } + if (vp->v_type == VFIFO) { + /* Due to way fifo works (by overloading f_ops), + * tricking kernel into write to the fifo leads to + * panic. Make a band-aid to filter the case. */ + error = EOPNOTSUPP; + goto bad; + } mode = 0; if (fmode & (FWRITE | O_TRUNC)) { if (vp->v_type == VDIR) { Index: kern/vfs_vnops.c =================================================================== RCS file: /usr/local/arch/ncvs/src/sys/kern/vfs_vnops.c,v retrieving revision 1.238 diff -u -r1.238 vfs_vnops.c --- kern/vfs_vnops.c 11 Mar 2006 17:14:05 -0000 1.238 +++ kern/vfs_vnops.c 14 Mar 2006 11:46:10 -0000 @@ -194,6 +194,13 @@ error = EOPNOTSUPP; goto bad; } + if ((vp->v_type == VFIFO) && (fdidx < 0)) { + /* Due to way fifo works (by overloading f_ops), + * tricking kernel into write to the fifo leads to + * panic. Make a band-aid to filter the case. */ + error = EOPNOTSUPP; + goto bad; + } mode = 0; if (fmode & (FWRITE | O_TRUNC)) { if (vp->v_type == VDIR) {
pgpdxgvwlrNKM.pgp
Description: PGP signature