From patchwork Fri Sep 18 00:58:32 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirsher, Jeffrey T" X-Patchwork-Id: 33816 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 83C77B7B6F for ; Fri, 18 Sep 2009 10:58:58 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755140AbZIRA6t (ORCPT ); Thu, 17 Sep 2009 20:58:49 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755136AbZIRA6s (ORCPT ); Thu, 17 Sep 2009 20:58:48 -0400 Received: from qmta04.emeryville.ca.mail.comcast.net ([76.96.30.40]:56213 "EHLO QMTA04.emeryville.ca.mail.comcast.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755044AbZIRA6s (ORCPT ); Thu, 17 Sep 2009 20:58:48 -0400 Received: from OMTA01.emeryville.ca.mail.comcast.net ([76.96.30.11]) by QMTA04.emeryville.ca.mail.comcast.net with comcast id i0LS1c00A0EPchoA40ysNA; Fri, 18 Sep 2009 00:58:52 +0000 Received: from localhost.localdomain ([63.64.152.142]) by OMTA01.emeryville.ca.mail.comcast.net with comcast id i0ya1c00134bfcX8M0ycsq; Fri, 18 Sep 2009 00:58:50 +0000 From: Jeff Kirsher Subject: [net-2.6 PATCH 5/6] net: fix sock locking for sk_err field in netlink. To: davem@davemloft.net Cc: netdev@vger.kernel.org, gospo@redhat.com, linux-scsi@vger.kernel.org, John Fastabend , Jeff Kirsher Date: Thu, 17 Sep 2009 17:58:32 -0700 Message-ID: <20090918005832.25594.45086.stgit@localhost.localdomain> In-Reply-To: <20090918005708.25594.52575.stgit@localhost.localdomain> References: <20090918005708.25594.52575.stgit@localhost.localdomain> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: John Fastabend This adds the sock lock around setting the sk_err field in sock struct. Without the lock multiple threads may write to this field. Signed-off-by: John Fastabend Signed-off-by: Jeff Kirsher --- net/netlink/af_netlink.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index aa74011..1669dfc 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -732,7 +732,9 @@ static void netlink_overrun(struct sock *sk) if (!(nlk->flags & NETLINK_RECV_NO_ENOBUFS)) { if (!test_and_set_bit(0, &nlk_sk(sk)->state)) { + lock_sock(sk); sk->sk_err = ENOBUFS; + release_sock(sk); sk->sk_error_report(sk); } } @@ -1101,7 +1103,9 @@ static inline int do_one_set_err(struct sock *sk, !test_bit(p->group - 1, nlk->groups)) goto out; + lock_sock(sk); sk->sk_err = p->code; + release_sock(sk); sk->sk_error_report(sk); out: return 0; @@ -1780,7 +1784,9 @@ void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err) in_skb->sk->sk_protocol, NETLINK_CB(in_skb).pid); if (sk) { + lock_sock(sk); sk->sk_err = ENOBUFS; + release_sock(sk); sk->sk_error_report(sk); sock_put(sk); }