PERFORCE change 62753 for review

John Baldwin jhb at FreeBSD.org
Wed Oct 6 08:19:50 PDT 2004


http://perforce.freebsd.org/chv.cgi?CH=62753

Change 62753 by jhb at jhb_slimer on 2004/10/06 15:18:56

	Add some KASSERT()'s to help catch the use after free bug in the
	file desc code that sparc64 machines keep tripping.

Affected files ...

.. //depot/projects/smpng/sys/kern/kern_descrip.c#67 edit

Differences ...

==== //depot/projects/smpng/sys/kern/kern_descrip.c#67 (text+ko) ====

@@ -179,6 +179,7 @@
 	FILEDESC_LOCK_ASSERT(fdp, MA_OWNED);
 	KASSERT(!fdisused(fdp, fd),
 	    ("fd already used"));
+	KASSERT(fdp->fd_map[NDSLOT(fd)] != 0xdeadc0de, ("writing to free'd map"));
 	fdp->fd_map[NDSLOT(fd)] |= NDBIT(fd);
 	if (fd > fdp->fd_lastfile)
 		fdp->fd_lastfile = fd;
@@ -197,6 +198,7 @@
 	    ("fd is already unused"));
 	KASSERT(fdp->fd_ofiles[fd] == NULL,
 	    ("fd is still in use"));
+	KASSERT(fdp->fd_map[NDSLOT(fd)] != 0xdeadc0de, ("writing to free'd map"));	
 	fdp->fd_map[NDSLOT(fd)] &= ~NDBIT(fd);
 	if (fd < fdp->fd_freefile)
 		fdp->fd_freefile = fd;
@@ -389,6 +391,7 @@
 
 	case F_SETFD:
 		/* mtx_assert(&Giant, MA_NOTOWNED); */
+		KASSERT(*pop != 0xdeadc0de, ("writing to free'd flags"));
 		*pop = (*pop &~ UF_EXCLOSE) |
 		    (arg & FD_CLOEXEC ? UF_EXCLOSE : 0);
 		FILEDESC_UNLOCK(fdp);
@@ -681,6 +684,7 @@
 	 * Duplicate the source descriptor
 	 */
 	fdp->fd_ofiles[new] = fp;
+	KASSERT(fdp->fd_ofileflags[old] != 0xdeadc0de, ("reading/writing free'd file flags"));
 	fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] &~ UF_EXCLOSE;
 	if (new > fdp->fd_lastfile)
 		fdp->fd_lastfile = new;


More information about the p4-projects mailing list