Subject: Re: net: sctp: rework multihoming retransmission path selection to rfc4960

From: Dave Jones <[email-masked]>
Date: Thu, 6 Mar 2014 01:02:32 -0500

On Wed, Mar 05, 2014 at 07:26:35PM +0000, Linux Kernel wrote:
 > Gitweb:     http://git.kernel.org/linus/;a=commit;h=4c47af4d5eb2c2f78f886079a3920a7078a6f0a0
 > Commit:     4c47af4d5eb2c2f78f886079a3920a7078a6f0a0
 > Parent:     b194c1f1dbd5f2671e49e0ac801b1b78dc7de93b
 > Author:     Daniel Borkmann <[email-masked]>
 > AuthorDate: Thu Feb 20 20:51:06 2014 +0100
 > Committer:  David S. Miller <[email-masked]>
 > CommitDate: Sat Feb 22 00:26:05 2014 -0500
 > 
 >     net: sctp: rework multihoming retransmission path selection to rfc4960

minor nit that coverity just picked up..
 
 > +	/* Iterate from retran_path's successor back to retran_path. */
 > +	for (trans = list_next_entry(trans, transports); 1;
 > +	     trans = list_next_entry(trans, transports)) {
 > +		/* Manually skip the head element. */
 > +		if (&trans->transports == &asoc->peer.transport_addr_list)
 > +			continue;
 > +		if (trans->state == SCTP_UNCONFIRMED)
 > +			continue;
 > +		trans_next = sctp_trans_elect_best(trans, trans_next);
 > +		/* Active is good enough for immediate return. */
 > +		if (trans_next->state == SCTP_ACTIVE)
 >  			break;

^ trans_next dereference ...
 
 > +		/* We've reached the end, time to update path. */
 > +		if (trans == asoc->peer.retran_path)
 >  			break;
 >  	}
 >  
 > +	if (trans_next != NULL)
 > +		asoc->peer.retran_path = trans_next;

Belated NULL check.

Either the check is redundant, or it needs to be moved up.

	Dave