From patchwork Thu Dec 6 17:34:26 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: sctp: proc: protect bind_addr->address_list accesses with rcu_read_lock() From: Thomas Graf X-Patchwork-Id: 204291 Message-Id: To: linux-sctp@vger.kernel.org Cc: netdev@vger.kernel.org, Vlad Yasevich , Neil Horman Date: Thu, 6 Dec 2012 18:34:26 +0100 address_list is protected via the socket lock or RCU. Since we don't want to take the socket lock for each assoc we dump in procfs a RCU read-side critical section must be entered. Cc: Vlad Yasevich Cc: Neil Horman Signed-off-by: Thomas Graf Acked-by: Neil Horman --- net/sctp/proc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/sctp/proc.c b/net/sctp/proc.c index 9966e7b..ec9b0c8 100644 --- a/net/sctp/proc.c +++ b/net/sctp/proc.c @@ -139,7 +139,8 @@ static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_commo primary = &peer->saddr; } - list_for_each_entry(laddr, &epb->bind_addr.address_list, list) { + rcu_read_lock(); + list_for_each_entry_rcu(laddr, &epb->bind_addr.address_list, list) { addr = &laddr->a; af = sctp_get_af_specific(addr->sa.sa_family); if (primary && af->cmp_addr(addr, primary)) { @@ -147,6 +148,7 @@ static void sctp_seq_dump_local_addrs(struct seq_file *seq, struct sctp_ep_commo } af->seq_dump_addr(seq, addr); } + rcu_read_unlock(); } /* Dump remote addresses of an association. */