[SCTP]: Fix up sctp_rcv return value
I was working on the ipip/xfrm problem and as usual I get side-tracked by other problems. As part of an attempt to change the IPv4 protocol handler calling convention I found that SCTP violated the existing convention. It's returning non-zero values after freeing the skb. This is doubly bad as 1) the skb gets resubmitted; 2) the return value is interpreted as a protocol number. This patch changes those return values to zero. IPv6 doesn't suffer from this problem because it uses a positive return value as an indication for resubmission. So the only effect of this patch there is to increment the IPSTATS_MIB_INDELIVERS counter which IMHO is the right thing to do. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									9f514950bb
								
							
						
					
					
						commit
						2babf9daae
					
				| @ -127,7 +127,6 @@ int sctp_rcv(struct sk_buff *skb) | ||||
| 	union sctp_addr dest; | ||||
| 	int family; | ||||
| 	struct sctp_af *af; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	if (skb->pkt_type!=PACKET_HOST) | ||||
| 		goto discard_it; | ||||
| @ -227,16 +226,13 @@ int sctp_rcv(struct sk_buff *skb) | ||||
| 		goto discard_release; | ||||
| 	nf_reset(skb); | ||||
| 
 | ||||
| 	ret = sk_filter(sk, skb, 1); | ||||
| 	if (ret) | ||||
| 	if (sk_filter(sk, skb, 1)) | ||||
|                 goto discard_release; | ||||
| 
 | ||||
| 	/* Create an SCTP packet structure. */ | ||||
| 	chunk = sctp_chunkify(skb, asoc, sk); | ||||
| 	if (!chunk) { | ||||
| 		ret = -ENOMEM; | ||||
| 	if (!chunk) | ||||
| 		goto discard_release; | ||||
| 	} | ||||
| 	SCTP_INPUT_CB(skb)->chunk = chunk; | ||||
| 
 | ||||
| 	/* Remember what endpoint is to handle this packet. */ | ||||
| @ -277,11 +273,11 @@ int sctp_rcv(struct sk_buff *skb) | ||||
| 	sctp_bh_unlock_sock(sk); | ||||
| 	sock_put(sk); | ||||
| 
 | ||||
| 	return ret; | ||||
| 	return 0; | ||||
| 
 | ||||
| discard_it: | ||||
| 	kfree_skb(skb); | ||||
| 	return ret; | ||||
| 	return 0; | ||||
| 
 | ||||
| discard_release: | ||||
| 	/* Release any structures we may be holding. */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user