diff options
author | Sabrina Dubroca <sd@queasysnail.net> | 2016-04-22 05:28:02 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-24 14:31:58 -0400 |
commit | c10c63ea739bce3b8a6ab85c7bb472d900c9b070 (patch) | |
tree | c1f411eb17d17a7790d7883f57d160b68521892c | |
parent | 72f2a05b8f367ee0d75584a6fbec7dbe7c144f27 (diff) |
macsec: take rtnl lock before for_each_netdev
Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
Reported-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/macsec.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index f691030ee3df..5f3ea8026074 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -2268,8 +2268,6 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, | |||
2268 | if (!hdr) | 2268 | if (!hdr) |
2269 | return -EMSGSIZE; | 2269 | return -EMSGSIZE; |
2270 | 2270 | ||
2271 | rtnl_lock(); | ||
2272 | |||
2273 | if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex)) | 2271 | if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex)) |
2274 | goto nla_put_failure; | 2272 | goto nla_put_failure; |
2275 | 2273 | ||
@@ -2429,14 +2427,11 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, | |||
2429 | 2427 | ||
2430 | nla_nest_end(skb, rxsc_list); | 2428 | nla_nest_end(skb, rxsc_list); |
2431 | 2429 | ||
2432 | rtnl_unlock(); | ||
2433 | |||
2434 | genlmsg_end(skb, hdr); | 2430 | genlmsg_end(skb, hdr); |
2435 | 2431 | ||
2436 | return 0; | 2432 | return 0; |
2437 | 2433 | ||
2438 | nla_put_failure: | 2434 | nla_put_failure: |
2439 | rtnl_unlock(); | ||
2440 | genlmsg_cancel(skb, hdr); | 2435 | genlmsg_cancel(skb, hdr); |
2441 | return -EMSGSIZE; | 2436 | return -EMSGSIZE; |
2442 | } | 2437 | } |
@@ -2450,6 +2445,7 @@ static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb) | |||
2450 | dev_idx = cb->args[0]; | 2445 | dev_idx = cb->args[0]; |
2451 | 2446 | ||
2452 | d = 0; | 2447 | d = 0; |
2448 | rtnl_lock(); | ||
2453 | for_each_netdev(net, dev) { | 2449 | for_each_netdev(net, dev) { |
2454 | struct macsec_secy *secy; | 2450 | struct macsec_secy *secy; |
2455 | 2451 | ||
@@ -2467,6 +2463,7 @@ next: | |||
2467 | } | 2463 | } |
2468 | 2464 | ||
2469 | done: | 2465 | done: |
2466 | rtnl_unlock(); | ||
2470 | cb->args[0] = d; | 2467 | cb->args[0] = d; |
2471 | return skb->len; | 2468 | return skb->len; |
2472 | } | 2469 | } |