kern/116034: Giant not owned at /usr/src/sys/netinet/tcp_sack.c:271=tcp_clean_sackreport(tp)

Robert Watson rwatson at FreeBSD.org
Tue Dec 4 08:44:04 PST 2007


On Mon, 3 Sep 2007, Dan Lukes wrote:

> add NET_LOCK_GIANT() / NET_UNLOCK_GIANT() into tcp_drain() unless someone 
> smarter than me claim that Giant is NOT required here

There's actually a slightly more general problem here--could you try this more 
general patch?  I've requested to merge this to 6.3.

Robert N M Watson
Computer Laboratory
University of Cambridge

Index: kern_mbuf.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_mbuf.c,v
retrieving revision 1.9.2.9
diff -u -r1.9.2.9 kern_mbuf.c
--- kern_mbuf.c	11 Feb 2007 03:31:18 -0000	1.9.2.9
+++ kern_mbuf.c	4 Dec 2007 15:53:52 -0000
@@ -550,9 +550,11 @@
  	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK | WARN_PANIC, NULL,
  	    "mb_reclaim()");

+	NET_LOCK_GIANT();
  	mbstat.m_drain++;
  	for (dp = domains; dp != NULL; dp = dp->dom_next)
  		for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
  			if (pr->pr_drain != NULL)
  				(*pr->pr_drain)();
+	NET_UNLOCK_GIANT();
  }


More information about the freebsd-bugs mailing list