Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Mar 2006 15:02:42 +0200
From:      Kostik Belousov <kostikbel@gmail.com>
To:        David Xu <davidxu@freebsd.org>, freebsd-stable@freebsd.org, Martin <nakal@nurfuerspam.de>, bug-followup@freebsd.org
Subject:   Re: [patch] Re: kern/94278: Crash with FIFOs and ktrace
Message-ID:  <20060314130242.GN37572@deviant.kiev.zoral.com.ua>
In-Reply-To: <20060314120153.GL37572@deviant.kiev.zoral.com.ua>
References:  <200603111140.k2BBerFh096411@freefall.freebsd.org> <200603140744.34246.davidxu@freebsd.org> <4416705A.50708@nurfuerspam.de> <200603141641.32705.davidxu@freebsd.org> <20060314120153.GL37572@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help

--qSHHer9gQ0dtepKr
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

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) {

--qSHHer9gQ0dtepKr
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (FreeBSD)

iD8DBQFEFr7vC3+MBN1Mb4gRAh9JAJsEEgDWtQU4mG+fcV+hp/VcXKmp/QCfUntI
XiXFoulphhvY5fn8XGoLCTM=
=KV3e
-----END PGP SIGNATURE-----

--qSHHer9gQ0dtepKr--



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