From owner-p4-projects@FreeBSD.ORG Wed Dec 24 10:31:20 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6F79816A4D0; Wed, 24 Dec 2003 10:31:20 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4A0CE16A4CE for ; Wed, 24 Dec 2003 10:31:20 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4D83F43D1F for ; Wed, 24 Dec 2003 10:31:19 -0800 (PST) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id hBOIVJ0B018791 for ; Wed, 24 Dec 2003 10:31:19 -0800 (PST) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id hBOIVIsn018785 for perforce@freebsd.org; Wed, 24 Dec 2003 10:31:18 -0800 (PST) (envelope-from sam@freebsd.org) Date: Wed, 24 Dec 2003 10:31:18 -0800 (PST) Message-Id: <200312241831.hBOIVIsn018785@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 44281 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Dec 2003 18:31:21 -0000 http://perforce.freebsd.org/chv.cgi?CH=44281 Change 44281 by sam@sam_ebb on 2003/12/24 10:31:15 bandaid LOR between IPFW and inpcb head Affected files ... .. //depot/projects/netperf+sockets/sys/netinet/ip_fw2.c#4 edit Differences ... ==== //depot/projects/netperf+sockets/sys/netinet/ip_fw2.c#4 (text+ko) ==== @@ -1296,7 +1296,8 @@ } static int -check_uidgid(ipfw_insn_u32 *insn, +check_uidgid(struct ip_fw_chain *chain, + ipfw_insn_u32 *insn, int proto, struct ifnet *oif, struct in_addr dst_ip, u_int16_t dst_port, struct in_addr src_ip, u_int16_t src_port) @@ -1317,7 +1318,10 @@ match = 0; - INP_INFO_RLOCK(pi); /* XXX LOR with IPFW */ + /* NB: reorder to avoid LOR between IPFW and inp */ + IPFW_UNLOCK(chain); + INP_INFO_RLOCK(pi); + IPFW_LOCK(chain); pcb = (oif) ? in_pcblookup_hash(pi, dst_ip, htons(dst_port), @@ -1657,7 +1661,7 @@ break; if (proto == IPPROTO_TCP || proto == IPPROTO_UDP) - match = check_uidgid( + match = check_uidgid(chain, (ipfw_insn_u32 *)cmd, proto, oif, dst_ip, dst_port,