• Eric Dumazet's avatar
    ipv6: tcp: fix race in IPV6_2292PKTOPTIONS · 1dc7b90f
    Eric Dumazet authored
    IPv6 TCP sockets store in np->pktoptions skbs, and use skb_set_owner_r()
    to charge the skb to socket.
    
    It means that destructor must be called while socket is locked.
    
    Therefore, we cannot use skb_get() or atomic_inc(&skb->users)
    to protect ourselves : kfree_skb() might race with other users
    manipulating sk->sk_forward_alloc
    
    Fix this race by holding socket lock for the duration of
    ip6_datagram_recv_ctl()
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1dc7b90f
ipv6_sockglue.c 28.6 KB