diff options
Diffstat (limited to 'net/sctp/input.c')
| -rw-r--r-- | net/sctp/input.c | 8 | 
1 files changed, 4 insertions, 4 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c index 0247cc432e02..b381d78548ac 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -106,6 +106,7 @@ int sctp_rcv(struct sk_buff *skb)  	int family;  	struct sctp_af *af;  	struct net *net = dev_net(skb->dev); +	bool is_gso = skb_is_gso(skb) && skb_is_gso_sctp(skb);  	if (skb->pkt_type != PACKET_HOST)  		goto discard_it; @@ -123,8 +124,7 @@ int sctp_rcv(struct sk_buff *skb)  	 * it's better to just linearize it otherwise crc computing  	 * takes longer.  	 */ -	if ((!(skb_shinfo(skb)->gso_type & SKB_GSO_SCTP) && -	     skb_linearize(skb)) || +	if ((!is_gso && skb_linearize(skb)) ||  	    !pskb_may_pull(skb, sizeof(struct sctphdr)))  		goto discard_it; @@ -135,7 +135,7 @@ int sctp_rcv(struct sk_buff *skb)  	if (skb_csum_unnecessary(skb))  		__skb_decr_checksum_unnecessary(skb);  	else if (!sctp_checksum_disable && -		 !(skb_shinfo(skb)->gso_type & SKB_GSO_SCTP) && +		 !is_gso &&  		 sctp_rcv_checksum(net, skb) < 0)  		goto discard_it;  	skb->csum_valid = 1; @@ -1218,7 +1218,7 @@ static struct sctp_association *__sctp_rcv_lookup_harder(struct net *net,  	 * issue as packets hitting this are mostly INIT or INIT-ACK and  	 * those cannot be on GSO-style anyway.  	 */ -	if ((skb_shinfo(skb)->gso_type & SKB_GSO_SCTP) == SKB_GSO_SCTP) +	if (skb_is_gso(skb) && skb_is_gso_sctp(skb))  		return NULL;  	ch = (struct sctp_chunkhdr *)skb->data;  |