svn commit: r304218 - head/sys/netinet

Randall Stewart rrs at netflix.com
Tue Aug 16 13:01:59 UTC 2016


Sure

Let me add some comments for you. The idea her is that you pick-up a reference
to the PCB.. so it can’t 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 at selasky.org> wrote:
> 
> 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);
>> +
>> +}
> 
> Hi,
> 
> Could you add some comments describing how it is considered safe to drop the INP write-lock and then pick it up again?
> 
> 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?
> 
> --HPS

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







More information about the svn-src-all mailing list