diff options
| author | Jani Nikula <jani.nikula@intel.com> | 2025-06-09 12:40:46 +0300 | 
|---|---|---|
| committer | Jani Nikula <jani.nikula@intel.com> | 2025-06-09 12:40:46 +0300 | 
| commit | 34c55367af96f62e89221444f04487440ebc6487 (patch) | |
| tree | fdb36ba67d7dea09455b55037e26043b7e051ef9 /net/ipv4/xfrm4_input.c | |
| parent | 7247efca0dcbc8ac6147db9200ed1549c0662465 (diff) | |
| parent | 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 (diff) | |
| download | linux-34c55367af96f62e89221444f04487440ebc6487.tar.xz | |
Merge drm/drm-next into drm-intel-next
Sync to v6.16-rc1, among other things to get the fixed size GENMASK_U*()
and BIT_U*() macros.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'net/ipv4/xfrm4_input.c')
| -rw-r--r-- | net/ipv4/xfrm4_input.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c index b5b06323cfd9..0d31a8c108d4 100644 --- a/net/ipv4/xfrm4_input.c +++ b/net/ipv4/xfrm4_input.c @@ -182,11 +182,15 @@ struct sk_buff *xfrm4_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,  	int offset = skb_gro_offset(skb);  	const struct net_offload *ops;  	struct sk_buff *pp = NULL; -	int ret; - -	offset = offset - sizeof(struct udphdr); +	int len, dlen; +	__u8 *udpdata; +	__be32 *udpdata32; -	if (!pskb_pull(skb, offset)) +	len = skb->len - offset; +	dlen = offset + min(len, 8); +	udpdata = skb_gro_header(skb, dlen, offset); +	udpdata32 = (__be32 *)udpdata; +	if (unlikely(!udpdata))  		return NULL;  	rcu_read_lock(); @@ -194,11 +198,10 @@ struct sk_buff *xfrm4_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,  	if (!ops || !ops->callbacks.gro_receive)  		goto out; -	ret = __xfrm4_udp_encap_rcv(sk, skb, false); -	if (ret) +	/* check if it is a keepalive or IKE packet */ +	if (len <= sizeof(struct ip_esp_hdr) || udpdata32[0] == 0)  		goto out; -	skb_push(skb, offset);  	NAPI_GRO_CB(skb)->proto = IPPROTO_UDP;  	pp = call_gro_receive(ops->callbacks.gro_receive, head, skb); @@ -208,7 +211,6 @@ struct sk_buff *xfrm4_gro_udp_encap_rcv(struct sock *sk, struct list_head *head,  out:  	rcu_read_unlock(); -	skb_push(skb, offset);  	NAPI_GRO_CB(skb)->same_flow = 0;  	NAPI_GRO_CB(skb)->flush = 1;  | 
