svn commit: r187715 - head/sys/fs/fifofs

Konstantin Belousov kib at FreeBSD.org
Mon Jan 26 06:21:01 PST 2009


Author: kib
Date: Mon Jan 26 14:21:00 2009
New Revision: 187715
URL: http://svn.freebsd.org/changeset/base/187715

Log:
  The kernel may do unbalanced calls to fifo_close() for fifo vnode,
  without corresponding number of fifo_open(). This causes assertion
  failure in fifo_close() due to vp->v_fifoinfo being NULL for kernel
  with INVARIANTS, or NULL pointer dereference otherwise. In fact, we may
  ignore excess calls to fifo_close() without bad consequences.
  
  Turn KASSERT() into the return, and print warning for now.
  
  Tested by:	pho
  Reviewed by:	rwatson
  MFC after:	2 weeks

Modified:
  head/sys/fs/fifofs/fifo_vnops.c

Modified: head/sys/fs/fifofs/fifo_vnops.c
==============================================================================
--- head/sys/fs/fifofs/fifo_vnops.c	Mon Jan 26 14:12:12 2009	(r187714)
+++ head/sys/fs/fifofs/fifo_vnops.c	Mon Jan 26 14:21:00 2009	(r187715)
@@ -423,7 +423,10 @@ fifo_close(ap)
 	struct fifoinfo *fip = vp->v_fifoinfo;
 
 	ASSERT_VOP_LOCKED(vp, "fifo_close");
-	KASSERT(fip != NULL, ("fifo_close: no v_fifoinfo"));
+	if (fip == NULL) {
+		printf("fifo_close: no v_fifoinfo %p\n", vp);
+		return (0);
+	}
 	if (ap->a_fflag & FREAD) {
 		fip->fi_readers--;
 		if (fip->fi_readers == 0)


More information about the svn-src-head mailing list