[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:
committed by
David S. Miller
parent
9f514950bb
commit
2babf9daae
@@ -127,7 +127,6 @@ int sctp_rcv(struct sk_buff *skb)
|
|||||||
union sctp_addr dest;
|
union sctp_addr dest;
|
||||||
int family;
|
int family;
|
||||||
struct sctp_af *af;
|
struct sctp_af *af;
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
if (skb->pkt_type!=PACKET_HOST)
|
if (skb->pkt_type!=PACKET_HOST)
|
||||||
goto discard_it;
|
goto discard_it;
|
||||||
@@ -227,16 +226,13 @@ int sctp_rcv(struct sk_buff *skb)
|
|||||||
goto discard_release;
|
goto discard_release;
|
||||||
nf_reset(skb);
|
nf_reset(skb);
|
||||||
|
|
||||||
ret = sk_filter(sk, skb, 1);
|
if (sk_filter(sk, skb, 1))
|
||||||
if (ret)
|
|
||||||
goto discard_release;
|
goto discard_release;
|
||||||
|
|
||||||
/* Create an SCTP packet structure. */
|
/* Create an SCTP packet structure. */
|
||||||
chunk = sctp_chunkify(skb, asoc, sk);
|
chunk = sctp_chunkify(skb, asoc, sk);
|
||||||
if (!chunk) {
|
if (!chunk)
|
||||||
ret = -ENOMEM;
|
|
||||||
goto discard_release;
|
goto discard_release;
|
||||||
}
|
|
||||||
SCTP_INPUT_CB(skb)->chunk = chunk;
|
SCTP_INPUT_CB(skb)->chunk = chunk;
|
||||||
|
|
||||||
/* Remember what endpoint is to handle this packet. */
|
/* Remember what endpoint is to handle this packet. */
|
||||||
@@ -277,11 +273,11 @@ int sctp_rcv(struct sk_buff *skb)
|
|||||||
sctp_bh_unlock_sock(sk);
|
sctp_bh_unlock_sock(sk);
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
|
|
||||||
return ret;
|
return 0;
|
||||||
|
|
||||||
discard_it:
|
discard_it:
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
return ret;
|
return 0;
|
||||||
|
|
||||||
discard_release:
|
discard_release:
|
||||||
/* Release any structures we may be holding. */
|
/* Release any structures we may be holding. */
|
||||||
|
|||||||
Reference in New Issue
Block a user