svn commit: r332114 - head/sys/netinet

Gleb Smirnoff glebius at FreeBSD.org
Wed Apr 11 22:12:40 UTC 2018


On Fri, Apr 06, 2018 at 04:48:11PM +0000, Jonathan T. Looney wrote:
J> Author: jtl
J> Date: Fri Apr  6 16:48:11 2018
J> New Revision: 332114
J> URL: https://svnweb.freebsd.org/changeset/base/332114
J> 
J> Log:
J>   Check that in_pcbfree() is only called once for each PCB.  If that
J>   assumption is violated, "bad things" could follow.
J>   
J>   I believe such an assert would have detected some of the problems jch@
J>   was chasing in PR 203175 (see r307551).  We also use it in our internal
J>   TCP development efforts.  And, in case a bug does slip through to
J>   released code, this change silently ignores subsequent calls to
J>   in_pcbfree().
J>   
J>   Reviewed by:	rrs
J>   Sponsored by:	Netflix, Inc.
J>   Differential Revision:	https://reviews.freebsd.org/D14990
J> 
J> Modified:
J>   head/sys/netinet/in_pcb.c
J> 
J> Modified: head/sys/netinet/in_pcb.c
J> ==============================================================================
J> --- head/sys/netinet/in_pcb.c	Fri Apr  6 16:48:07 2018	(r332113)
J> +++ head/sys/netinet/in_pcb.c	Fri Apr  6 16:48:11 2018	(r332114)
J> @@ -1288,6 +1288,13 @@ in_pcbfree(struct inpcb *inp)
J>  
J>  	KASSERT(inp->inp_socket == NULL, ("%s: inp_socket != NULL", __func__));
J>  
J> +	KASSERT((inp->inp_flags2 & INP_FREED) == 0,
J> +	    ("%s: called twice for pcb %p", __func__, inp));
J> +	if (inp->inp_flags2 & INP_FREED) {
J> +		INP_WUNLOCK(inp);
J> +		return;
J> +	}
J> +

This code will create Coverity report. IMHO, only KASSERT should be left.

-- 
Gleb Smirnoff


More information about the svn-src-head mailing list