All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: David Miller <davem@davemloft.net>
Cc: <netdev@vger.kernel.org>,
	Herbert Xu <herbert@gondor.apana.org.au>,
	Stephen Hemminger <shemminger@vyatta.com>,
	Ben Greear <greearb@candelatech.com>,
	Patrick McHardy <kaber@trash.net>
Subject: [PATCH 4/7] net: Fix devinet_sysctl_forward
Date: Wed, 13 May 2009 19:59:21 -0700	[thread overview]
Message-ID: <m1k54kqtiu.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <m13ab8s8cr.fsf@fess.ebiederm.org> (Eric W. Biederman's message of "Wed\, 13 May 2009 19\:53\:40 -0700")


sysctls are unregistered with the rntl_lock held making
it unsafe to unconditionally grab the the rtnl_lock.  Instead
we need to call rtnl_trylock and restart the system call
if we can not grab it.  Otherwise we could deadlock at unregistration
time.

Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
---
 net/ipv4/devinet.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index 126bb91..3863c3a 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1347,7 +1347,8 @@ static int devinet_sysctl_forward(ctl_table *ctl, int write,
 		struct net *net = ctl->extra2;
 
 		if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) {
-			rtnl_lock();
+			if (!rtnl_trylock())
+				return restart_syscall();
 			if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) {
 				inet_forward_change(net);
 			} else if (*valp) {
-- 
1.6.0.6


  parent reply	other threads:[~2009-05-14  2:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-14  2:53 [PATCH 0/7] IPv4/IPv6 unregistration deadlock fixes Eric W. Biederman
2009-05-14  2:55 ` [PATCH] syscall: Implement a convinience function restart_syscall Eric W. Biederman
2009-05-14  2:57 ` [PATCH 2/7] net-sysfs: Use rtnl_trylock in sysfs methods Eric W. Biederman
2009-05-14  2:58   ` [PATCH 3/7] net: FIX ipv6_forward sysctl restart Eric W. Biederman
2009-05-14  2:59 ` Eric W. Biederman [this message]
2009-05-14  3:00 ` [PATCH 5/7] net: Fix bridgeing sysfs handling of rtnl_lock Eric W. Biederman
2009-05-14  3:01 ` [PATCH 6/7] net: Fix ipoib rtnl_lock sysfs deadlock Eric W. Biederman
2009-05-14  3:02 ` [PATCH 7/7] net: FIX bonding sysfs rtnl_lock deadlock Eric W. Biederman
2009-05-14  3:40 ` [PATCH 0/7] IPv4/IPv6 unregistration deadlock fixes David Miller
2009-05-14  6:44 ` [PATCH 1/7] syscall: Implement a convinience function restart_syscall Eric W. Biederman
2009-05-19  5:16 ` [PATCH 0/7] IPv4/IPv6 unregistration deadlock fixes David Miller
2009-05-19  8:07   ` Eric W. Biederman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1k54kqtiu.fsf@fess.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=davem@davemloft.net \
    --cc=greearb@candelatech.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=kaber@trash.net \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@vyatta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.