diff options
author | Sabrina Dubroca <sd@queasysnail.net> | 2016-04-22 05:28:05 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-04-24 14:31:58 -0400 |
commit | 96cfc5052c5d434563873caa7707b32b9e389b16 (patch) | |
tree | aabf940f183470c62512bb1852bbacc8ba3e18fe | |
parent | c3b7d0bd7ac2c501d4806db71ddd383c184968e8 (diff) |
macsec: add consistency check to netlink dumps
Use genl_dump_check_consistent in dump_secy.
Fixes: c09440f7dcb3 ("macsec: introduce IEEE 802.1AE driver")
Suggested-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 | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 1fd2b147fda1..41fbe556ba6d 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -2271,6 +2271,8 @@ static int dump_secy(struct macsec_secy *secy, struct net_device *dev, | |||
2271 | if (!hdr) | 2271 | if (!hdr) |
2272 | return -EMSGSIZE; | 2272 | return -EMSGSIZE; |
2273 | 2273 | ||
2274 | genl_dump_check_consistent(cb, hdr, &macsec_fam); | ||
2275 | |||
2274 | if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex)) | 2276 | if (nla_put_u32(skb, MACSEC_ATTR_IFINDEX, dev->ifindex)) |
2275 | goto nla_put_failure; | 2277 | goto nla_put_failure; |
2276 | 2278 | ||
@@ -2439,6 +2441,8 @@ nla_put_failure: | |||
2439 | return -EMSGSIZE; | 2441 | return -EMSGSIZE; |
2440 | } | 2442 | } |
2441 | 2443 | ||
2444 | static int macsec_generation = 1; /* protected by RTNL */ | ||
2445 | |||
2442 | static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb) | 2446 | static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb) |
2443 | { | 2447 | { |
2444 | struct net *net = sock_net(skb->sk); | 2448 | struct net *net = sock_net(skb->sk); |
@@ -2449,6 +2453,9 @@ static int macsec_dump_txsc(struct sk_buff *skb, struct netlink_callback *cb) | |||
2449 | 2453 | ||
2450 | d = 0; | 2454 | d = 0; |
2451 | rtnl_lock(); | 2455 | rtnl_lock(); |
2456 | |||
2457 | cb->seq = macsec_generation; | ||
2458 | |||
2452 | for_each_netdev(net, dev) { | 2459 | for_each_netdev(net, dev) { |
2453 | struct macsec_secy *secy; | 2460 | struct macsec_secy *secy; |
2454 | 2461 | ||
@@ -2920,6 +2927,8 @@ static void macsec_dellink(struct net_device *dev, struct list_head *head) | |||
2920 | struct net_device *real_dev = macsec->real_dev; | 2927 | struct net_device *real_dev = macsec->real_dev; |
2921 | struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev); | 2928 | struct macsec_rxh_data *rxd = macsec_data_rtnl(real_dev); |
2922 | 2929 | ||
2930 | macsec_generation++; | ||
2931 | |||
2923 | unregister_netdevice_queue(dev, head); | 2932 | unregister_netdevice_queue(dev, head); |
2924 | list_del_rcu(&macsec->secys); | 2933 | list_del_rcu(&macsec->secys); |
2925 | if (list_empty(&rxd->secys)) | 2934 | if (list_empty(&rxd->secys)) |
@@ -3066,6 +3075,8 @@ static int macsec_newlink(struct net *net, struct net_device *dev, | |||
3066 | if (err < 0) | 3075 | if (err < 0) |
3067 | goto del_dev; | 3076 | goto del_dev; |
3068 | 3077 | ||
3078 | macsec_generation++; | ||
3079 | |||
3069 | dev_hold(real_dev); | 3080 | dev_hold(real_dev); |
3070 | 3081 | ||
3071 | return 0; | 3082 | return 0; |