diff options
author | Eric Dumazet <edumazet@google.com> | 2015-01-21 12:45:42 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-01-26 09:44:08 +0100 |
commit | 1dc7b90f7cd050ef6d5e511e652347e52874469c (patch) | |
tree | 5362ed5e14526d303ba83fc1f596f69fb63933ba /net/ipv4/xfrm4_mode_tunnel.c | |
parent | rhashtable: fix rht_for_each_entry_safe() endless loop (diff) | |
download | linux-1dc7b90f7cd050ef6d5e511e652347e52874469c.tar.xz linux-1dc7b90f7cd050ef6d5e511e652347e52874469c.zip |
ipv6: tcp: fix race in IPV6_2292PKTOPTIONS
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: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/xfrm4_mode_tunnel.c')
0 files changed, 0 insertions, 0 deletions