X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=net%2Fsctp%2Fipv6.c;h=1f9a6f77980bf0d0911b803b54293a8252afd9d1;hp=0b6a3913ef534a3baa44917c688ce0cd6b247fee;hb=5c85649e8da22945f8e4616717543991a81bfba2;hpb=d85242d91610acbe4f905624a5758a01ae7bb32c diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index 0b6a3913ef53..1f9a6f77980b 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c @@ -635,6 +635,7 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk, 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) @@ -654,6 +655,13 @@ static struct sock *sctp_v6_create_accept_sk(struct sock *sk, 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(). */