Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 2 Jun 2011 04:57:09 +0000
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        Robert Watson <rwatson@FreeBSD.org>
Cc:        current@FreeBSD.org
Subject:   Re: FYI: merging TCP, UDP, netisr locking changes
Message-ID:  <B1362197-7468-4738-A0DE-D82E7344011C@FreeBSD.org>
In-Reply-To: <alpine.BSF.2.00.1105301051260.60306@fledge.watson.org>
References:  <alpine.BSF.2.00.1105241220100.9704@fledge.watson.org> <alpine.BSF.2.00.1105301051260.60306@fledge.watson.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On May 30, 2011, at 9:53 AM, Robert Watson wrote:

>> This work has been sponsored by Juniper Networks.  Thanks also to =
Bjoern Zeeb, who has been reviewing changes!

And pointy hat to me for missing this one:(


> After a series of smaller commits, I've just merged some initial =
decomposition of the pcbinfo lock into an additional pcbhash lock, which =
changes lock ordering and lookup with respect to inpcbs significantly =
(r222488; commit message below).  I expect there to be some initial =
instability as people shake out edge cases I didn't bump into in my =
testing.  Please report bugs to current@, and I'll pick them up there!

Can you review the following I found this morning on my IPv6 only
snapshot VM.  We need to make sure all the src/tools/regression test
cases equally run IPv6.  Patches certainly welcome from the community!

!
! Do not leak the pcbinfohash lock in case in6_pcbladdr() errors
! for a tcp connect on IPv6.
!
! Submitted by:	bz
!
Index: sys/netinet/tcp_usrreq.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/netinet/tcp_usrreq.c    (revision 222591)
+++ sys/netinet/tcp_usrreq.c    (working copy)
@@ -1158,7 +1158,7 @@ tcp6_connect(struct tcpcb *tp, struct sockaddr *na
         */
        error =3D in6_pcbladdr(inp, nam, &addr6);
        if (error)
-               return error;
+               goto out;
        oinp =3D in6_pcblookup_hash_locked(inp->inp_pcbinfo,
                                  &sin6->sin6_addr, sin6->sin6_port,
                                  =
IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)


--=20
Bjoern A. Zeeb                                 You have to have visions!
         Stop bit received. Insert coin for new address family.




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B1362197-7468-4738-A0DE-D82E7344011C>