From owner-cvs-src-old@FreeBSD.ORG Tue Jul 28 14:09:29 2009 Return-Path: Delivered-To: cvs-src-old@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6DDBD106578B for ; Tue, 28 Jul 2009 14:09:29 +0000 (UTC) (envelope-from rrs@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 576B48FC21 for ; Tue, 28 Jul 2009 14:09:29 +0000 (UTC) (envelope-from rrs@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6SE9T44081303 for ; Tue, 28 Jul 2009 14:09:29 GMT (envelope-from rrs@repoman.freebsd.org) Received: (from svn2cvs@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6SE9T5A081302 for cvs-src-old@freebsd.org; Tue, 28 Jul 2009 14:09:29 GMT (envelope-from rrs@repoman.freebsd.org) Message-Id: <200907281409.n6SE9T5A081302@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: svn2cvs set sender to rrs@repoman.freebsd.org using -f From: Randall Stewart Date: Tue, 28 Jul 2009 14:09:06 +0000 (UTC) To: cvs-src-old@freebsd.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/netinet sctp_auth.c sctp_indata.c sctputil.c sctputil.h X-BeenThere: cvs-src-old@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: **OBSOLETE** CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Jul 2009 14:09:29 -0000 rrs 2009-07-28 14:09:06 UTC FreeBSD src repository Modified files: sys/netinet sctp_auth.c sctp_indata.c sctputil.c sctputil.h Log: SVN rev 195918 on 2009-07-28 14:09:06Z by rrs Turns out that when a receiver forwards through its TNS's the processing code holds the read lock (when processing a FWD-TSN for pr-sctp). If it finds stranded data that can be given to the application, it calls sctp_add_to_readq(). The readq function also grabs this lock. So if INVAR is on we get a double recurse on a non-recursive lock and panic. This fix will change it so that readq() function gets a flag to tell if the lock is held, if so then it does not get the lock. Approved by: re@freebsd.org (Kostik Belousov) MFC after: 1 week Revision Changes Path 1.23 +1 -1 src/sys/netinet/sctp_auth.c 1.64 +15 -9 src/sys/netinet/sctp_indata.c 1.93 +21 -12 src/sys/netinet/sctputil.c 1.37 +3 -0 src/sys/netinet/sctputil.h