diff options
author | WANG Cong <xiyou.wangcong@gmail.com> | 2017-04-12 12:32:13 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-04-17 12:46:50 -0400 |
commit | 1215e51edad1272e669172b26aa12aac94810c7f (patch) | |
tree | 273156966c9fb351ee4181712ebbcfc576495258 /net/ipv4/ip_sockglue.c | |
parent | 271a8b428f8361f3ad4c599835ccd34dd458b212 (diff) | |
download | linux-stable-1215e51edad1272e669172b26aa12aac94810c7f.tar.gz linux-stable-1215e51edad1272e669172b26aa12aac94810c7f.tar.bz2 linux-stable-1215e51edad1272e669172b26aa12aac94810c7f.zip |
ipv4: fix a deadlock in ip_ra_control
Similar to commit 87e9f0315952
("ipv4: fix a potential deadlock in mcast getsockopt() path"),
there is a deadlock scenario for IP_ROUTER_ALERT too:
CPU0 CPU1
---- ----
lock(rtnl_mutex);
lock(sk_lock-AF_INET);
lock(rtnl_mutex);
lock(sk_lock-AF_INET);
Fix this by always locking RTNL first on all setsockopt() paths.
Note, after this patch ip_ra_lock is no longer needed either.
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_sockglue.c')
-rw-r--r-- | net/ipv4/ip_sockglue.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index ebd953bc5607..bda318ae9876 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -591,6 +591,7 @@ static bool setsockopt_needs_rtnl(int optname) case MCAST_LEAVE_GROUP: case MCAST_LEAVE_SOURCE_GROUP: case MCAST_UNBLOCK_SOURCE: + case IP_ROUTER_ALERT: return true; } return false; |