This is a note to let you know that I've just added the patch titled

    ipv6: sctp: clone options to avoid use after free

to the 4.1-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     ipv6-sctp-clone-options-to-avoid-use-after-free.patch
and it can be found in the queue-4.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


>From foo@baz Wed Dec 30 19:52:45 PST 2015
From: Eric Dumazet <eduma...@google.com>
Date: Wed, 9 Dec 2015 07:25:06 -0800
Subject: ipv6: sctp: clone options to avoid use after free

From: Eric Dumazet <eduma...@google.com>

[ Upstream commit 9470e24f35ab81574da54e69df90c1eb4a96b43f ]

SCTP is lacking proper np->opt cloning at accept() time.

TCP and DCCP use ipv6_dup_options() helper, do the same
in SCTP.

We might later factorize this code in a common helper to avoid
future mistakes.

Reported-by: Dmitry Vyukov <dvyu...@google.com>
Signed-off-by: Eric Dumazet <eduma...@google.com>
Acked-by: Vlad Yasevich <vyasev...@gmail.com>
Signed-off-by: David S. Miller <da...@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 net/sctp/ipv6.c |    8 ++++++++
 1 file changed, 8 insertions(+)

--- a/net/sctp/ipv6.c
+++ b/net/sctp/ipv6.c
@@ -634,6 +634,7 @@ static struct sock *sctp_v6_create_accep
        struct sock *newsk;
        struct ipv6_pinfo *newnp, *np = inet6_sk(sk);
        struct sctp6_sock *newsctp6sk;
+       struct ipv6_txoptions *opt;
 
        newsk = sk_alloc(sock_net(sk), PF_INET6, GFP_KERNEL, sk->sk_prot);
        if (!newsk)
@@ -653,6 +654,13 @@ static struct sock *sctp_v6_create_accep
 
        memcpy(newnp, np, sizeof(struct ipv6_pinfo));
 
+       rcu_read_lock();
+       opt = rcu_dereference(np->opt);
+       if (opt)
+               opt = ipv6_dup_options(newsk, opt);
+       RCU_INIT_POINTER(newnp->opt, opt);
+       rcu_read_unlock();
+
        /* Initialize sk's sport, dport, rcv_saddr and daddr for getsockname()
         * and getpeername().
         */


Patches currently in stable-queue which might be from eduma...@google.com are

queue-4.1/ipv6-sctp-clone-options-to-avoid-use-after-free.patch
queue-4.1/tcp-restore-fastopen-with-no-data-in-syn-packet.patch
queue-4.1/net_sched-make-qdisc_tree_decrease_qlen-work-for-non-mq.patch
queue-4.1/net-fix-ip-early-demux-races.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to