ipv6: add complete rcu protection around np->opt
This patch addresses multiple problems : UDP/RAW sendmsg() need to get a stable struct ipv6_txoptions while socket is not locked : Other threads can change np->opt concurrently. Dmitry posted a syzkaller (http://github.com/google/syzkaller ) program desmonstrating use-after-free. Starting with TCP/DCCP lockless listeners, tcp_v6_syn_recv_sock() and dccp_v6_request_recv_sock() also need to use RCU protection to dereference np->opt once (before calling ipv6_dup_options()) This patch adds full RCU protection to np->opt Reported-by:Dmitry Vyukov <dvyukov@google.com> Signed-off-by:
Eric Dumazet <edumazet@google.com> Acked-by:
Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- include/linux/ipv6.h 1 addition, 1 deletioninclude/linux/ipv6.h
- include/net/ipv6.h 20 additions, 1 deletioninclude/net/ipv6.h
- net/dccp/ipv6.c 21 additions, 12 deletionsnet/dccp/ipv6.c
- net/ipv6/af_inet6.c 9 additions, 4 deletionsnet/ipv6/af_inet6.c
- net/ipv6/datagram.c 3 additions, 1 deletionnet/ipv6/datagram.c
- net/ipv6/exthdrs.c 2 additions, 1 deletionnet/ipv6/exthdrs.c
- net/ipv6/inet6_connection_sock.c 8 additions, 3 deletionsnet/ipv6/inet6_connection_sock.c
- net/ipv6/ipv6_sockglue.c 22 additions, 11 deletionsnet/ipv6/ipv6_sockglue.c
- net/ipv6/raw.c 6 additions, 2 deletionsnet/ipv6/raw.c
- net/ipv6/syncookies.c 1 addition, 1 deletionnet/ipv6/syncookies.c
- net/ipv6/tcp_ipv6.c 17 additions, 11 deletionsnet/ipv6/tcp_ipv6.c
- net/ipv6/udp.c 6 additions, 2 deletionsnet/ipv6/udp.c
- net/l2tp/l2tp_ip6.c 6 additions, 2 deletionsnet/l2tp/l2tp_ip6.c
Loading
Please register or sign in to comment