]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
dccp/tcp: do not inherit mc_list from parent
authorEric Dumazet <edumazet@google.com>
Tue, 9 May 2017 13:29:19 +0000 (06:29 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Sun, 9 Jul 2017 01:23:56 +0000 (18:23 -0700)
Orabug: 26408144
CVE: CVE-2017-8890

syzkaller found a way to trigger double frees from ip_mc_drop_socket()

It turns out that leave a copy of parent mc_list at accept() time,
which is very bad.

Very similar to commit 8b485ce69876 ("tcp: do not inherit
fastopen_req from parent")

Initial report from Pray3r, completed by Andrey one.
Thanks a lot to them !

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Pray3r <pray3r.z@gmail.com>
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Conflicts:
net/ipv4/inet_connection_sock.c

net/ipv4/inet_connection_sock.c

index 4d2bc8c6694f6d42170c128d411b1cc0bc308f93..11a8a848613717f4738d93a73331043cfaa1d39d 100644 (file)
@@ -719,6 +719,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk,
                inet_sk(newsk)->inet_sport = htons(inet_rsk(req)->ir_num);
                newsk->sk_write_space = sk_stream_write_space;
 
+               inet_sk(newsk)->mc_list = NULL;
+
                newsk->sk_mark = inet_rsk(req)->ir_mark;
                atomic64_set(&newsk->sk_cookie,
                             atomic64_read(&inet_rsk(req)->ir_cookie));