aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSabrina Dubroca <sd@queasysnail.net>2016-04-22 05:28:02 -0400
committerDavid S. Miller <davem@davemloft.net>2016-04-24 14:31:58 -0400
commitc10c63ea739bce3b8a6ab85c7bb472d900c9b070 (patch)
treec1f411eb17d17a7790d7883f57d160b68521892c
parent72f2a05b8f367ee0d75584a6fbec7dbe7c144f27 (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.c7
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
2438nla_put_failure: 2434nla_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
2469done: 2465done:
2466 rtnl_unlock();
2470 cb->args[0] = d; 2467 cb->args[0] = d;
2471 return skb->len; 2468 return skb->len;
2472} 2469}