Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Aug 2016 06:01:57 -0700
From:      Randall Stewart <rrs@netflix.com>
To:        Hans Petter Selasky <hps@selasky.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r304218 - head/sys/netinet
Message-ID:  <272AD783-2988-4EE7-89A5-EC6FA1313122@netflix.com>
In-Reply-To: <92a3cfc1-56bc-813f-dd12-ac19c66fd716@selasky.org>
References:  <201608161240.u7GCeuWS082118@repo.freebsd.org> <92a3cfc1-56bc-813f-dd12-ac19c66fd716@selasky.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Sure

Let me add some comments for you. The idea her is that you pick-up a =
reference
to the PCB.. so it can=E2=80=99t be removed. Thus when you re-lock the =
INP you check the
dropped flag (just in case someone did get in).

Let me get that in comments.. (note thats also why when using this =
function you
have to use its companion function to drop the reference).

> On Aug 16, 2016, at 5:58 AM, Hans Petter Selasky <hps@selasky.org> =
wrote:
>=20
> On 08/16/16 14:40, Randall Stewart wrote:
>> +int
>> +tcp_inpinfo_lock_add(struct inpcb *inp)
>> +{
>> +	in_pcbref(inp);
>> +	INP_WUNLOCK(inp);
>> +	INP_INFO_RLOCK(&V_tcbinfo);
>> +	INP_WLOCK(inp);
>> +	if (inp->inp_flags & (INP_TIMEWAIT | INP_DROPPED)) {
>> +		return(1);
>> +	}
>> +	return(0);
>> +
>> +}
>=20
> Hi,
>=20
> Could you add some comments describing how it is considered safe to =
drop the INP write-lock and then pick it up again?
>=20
> My first impression is that because you are dropping the inp lock, =
multiple threads can enter the code in question, leaving the window open =
to races?
>=20
> --HPS

--------
Randall Stewart
rrs@netflix.com
803-317-4952








Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?272AD783-2988-4EE7-89A5-EC6FA1313122>