Patch "ipv6: sctp: add rcu protection around np->opt" has been added to the 3.18-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ipv6: sctp: add rcu protection around np->opt
to the 3.18-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-add-rcu-protection-around-np-opt.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
c836a8ba93869d6a0290a6ae0047fbef09066871Mon Sep 17 00:00:00 2001
From: Eric Dumazet <[email protected]>
Date: Wed, 2 Dec 2015 21:48:14 -0800
Subject: ipv6: sctp: add rcu protection around np->opt
From: Eric Dumazet <[email protected]>
commit c836a8ba93869d6a0290a6ae0047fbef09066871 upstream.
This patch completes the work I did in commit 45f6fad84cc3 ("ipv6: add complete rcu protection around np->opt"), as I missed sctp part.
This simply makes sure np->opt is used with proper RCU locking and accessors.
--- net/sctp/ipv6.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
net/sctp/ipv6.c +10 -3
@@ -209,6 +209,7 @@ static int sctp_v6_xmit(struct sk_buff *struct sock *sk = skb->sk;struct ipv6_pinfo *np =inet6_sk (sk);struct flowi6 *fl6 = &transport->fl.u.ip6; +int res;pr_debug ("%s: skb:%p, len:%d, src:%pI6 dst:%pI6\n" , __func__, skb, skb->len, &fl6->saddr, &fl6->daddr);
@@ -220,7 +221,10 @@ static int sctp_v6_xmit(struct sk_buff *SCTP_INC_STATS (sock_net (sk),SCTP_MIB_OUTSCTPPACKS ); -return ip6_xmit (sk, skb, fl6, np->opt, np->tclass); +rcu_read_lock (); + res =ip6_xmit (sk, skb, fl6,rcu_dereference (np->opt), np->tclass); +rcu_read_unlock (); +return res; }/* Returns the dst cache entry for the given source and destination ip
@@ -262,7 +266,10 @@ static void sctp_v6_get_dst(struct sctp_pr_debug ("src=%pI6 - " , &fl6->saddr); } - final_p =fl6_update_dst (fl6, np->opt, &final); +rcu_read_lock (); + final_p =fl6_update_dst (fl6,rcu_dereference (np->opt), &final); +rcu_read_unlock (); + dst =ip6_dst_lookup_flow (sk, fl6, final_p);if (!asoc || saddr) goto out;
@@ -321,7 +328,7 @@ static void sctp_v6_get_dst(struct sctp_if (baddr) { fl6->saddr = baddr->v6.sin6_addr; fl6->fl6_sport = baddr->v6.sin6_port; - final_p =fl6_update_dst (fl6, np->opt, &final); + final_p =fl6_update_dst (fl6,rcu_dereference (np->opt), &final); dst =ip6_dst_lookup_flow (sk, fl6, final_p); }
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/ipv6-sctp-add-rcu-protection-around-np-opt.patch queue-3.18/ipv6-sctp-fix-lockdep-splat-in-sctp_v6_get_dst.patch