mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
vxlan: Fix potential null-ptr-deref in vxlan_gro_prepare_receive().
udp_tunnel_sock_release() could set sk->sk_user_data to NULL
while vxlan_gro_prepare_receive() is running.
Let's check if rcu_dereference_sk_user_data() is NULL after
skb_gro_remcsum_init().
Fixes: 5602c48cf8 ("vxlan: change vxlan to use UDP socket GRO")
Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260502031401.3557229-7-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
af3f903fbb
commit
30a45c0bff
|
|
@ -657,14 +657,18 @@ static struct vxlanhdr *vxlan_gro_prepare_receive(struct sock *sk,
|
|||
struct sk_buff *skb,
|
||||
struct gro_remcsum *grc)
|
||||
{
|
||||
struct sk_buff *p;
|
||||
struct vxlanhdr *vh, *vh2;
|
||||
unsigned int hlen, off_vx;
|
||||
struct vxlan_sock *vs = rcu_dereference_sk_user_data(sk);
|
||||
struct vxlan_sock *vs;
|
||||
struct sk_buff *p;
|
||||
__be32 flags;
|
||||
|
||||
skb_gro_remcsum_init(grc);
|
||||
|
||||
vs = rcu_dereference_sk_user_data(sk);
|
||||
if (!vs)
|
||||
return NULL;
|
||||
|
||||
off_vx = skb_gro_offset(skb);
|
||||
hlen = off_vx + sizeof(*vh);
|
||||
vh = skb_gro_header(skb, hlen, off_vx);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user