hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/net/ieee802154/nl802154.c
....@@ -1,11 +1,5 @@
1
-/* This program is free software; you can redistribute it and/or modify
2
- * it under the terms of the GNU General Public License version 2
3
- * as published by the Free Software Foundation.
4
- *
5
- * This program is distributed in the hope that it will be useful,
6
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
7
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8
- * GNU General Public License for more details.
1
+// SPDX-License-Identifier: GPL-2.0-only
2
+/*
93 *
104 * Authors:
115 * Alexander Aring <aar@pengutronix.de>
....@@ -242,19 +236,14 @@
242236 struct cfg802154_registered_device **rdev,
243237 struct wpan_dev **wpan_dev)
244238 {
239
+ const struct genl_dumpit_info *info = genl_dumpit_info(cb);
245240 int err;
246241
247242 rtnl_lock();
248243
249244 if (!cb->args[0]) {
250
- err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize,
251
- genl_family_attrbuf(&nl802154_fam),
252
- nl802154_fam.maxattr, nl802154_policy, NULL);
253
- if (err)
254
- goto out_unlock;
255
-
256245 *wpan_dev = __cfg802154_wpan_dev_from_attrs(sock_net(skb->sk),
257
- genl_family_attrbuf(&nl802154_fam));
246
+ info->attrs);
258247 if (IS_ERR(*wpan_dev)) {
259248 err = PTR_ERR(*wpan_dev);
260249 goto out_unlock;
....@@ -312,7 +301,7 @@
312301 static int
313302 nl802154_put_flags(struct sk_buff *msg, int attr, u32 mask)
314303 {
315
- struct nlattr *nl_flags = nla_nest_start(msg, attr);
304
+ struct nlattr *nl_flags = nla_nest_start_noflag(msg, attr);
316305 int i;
317306
318307 if (!nl_flags)
....@@ -338,7 +327,7 @@
338327 struct nlattr *nl_page;
339328 unsigned long page;
340329
341
- nl_page = nla_nest_start(msg, NL802154_ATTR_CHANNELS_SUPPORTED);
330
+ nl_page = nla_nest_start_noflag(msg, NL802154_ATTR_CHANNELS_SUPPORTED);
342331 if (!nl_page)
343332 return -ENOBUFS;
344333
....@@ -360,11 +349,11 @@
360349 struct nlattr *nl_caps, *nl_channels;
361350 int i;
362351
363
- nl_caps = nla_nest_start(msg, NL802154_ATTR_WPAN_PHY_CAPS);
352
+ nl_caps = nla_nest_start_noflag(msg, NL802154_ATTR_WPAN_PHY_CAPS);
364353 if (!nl_caps)
365354 return -ENOBUFS;
366355
367
- nl_channels = nla_nest_start(msg, NL802154_CAP_ATTR_CHANNELS);
356
+ nl_channels = nla_nest_start_noflag(msg, NL802154_CAP_ATTR_CHANNELS);
368357 if (!nl_channels)
369358 return -ENOBUFS;
370359
....@@ -380,8 +369,8 @@
380369 if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL) {
381370 struct nlattr *nl_ed_lvls;
382371
383
- nl_ed_lvls = nla_nest_start(msg,
384
- NL802154_CAP_ATTR_CCA_ED_LEVELS);
372
+ nl_ed_lvls = nla_nest_start_noflag(msg,
373
+ NL802154_CAP_ATTR_CCA_ED_LEVELS);
385374 if (!nl_ed_lvls)
386375 return -ENOBUFS;
387376
....@@ -396,7 +385,8 @@
396385 if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_TXPOWER) {
397386 struct nlattr *nl_tx_pwrs;
398387
399
- nl_tx_pwrs = nla_nest_start(msg, NL802154_CAP_ATTR_TX_POWERS);
388
+ nl_tx_pwrs = nla_nest_start_noflag(msg,
389
+ NL802154_CAP_ATTR_TX_POWERS);
400390 if (!nl_tx_pwrs)
401391 return -ENOBUFS;
402392
....@@ -504,7 +494,7 @@
504494 if (nl802154_put_capabilities(msg, rdev))
505495 goto nla_put_failure;
506496
507
- nl_cmds = nla_nest_start(msg, NL802154_ATTR_SUPPORTED_COMMANDS);
497
+ nl_cmds = nla_nest_start_noflag(msg, NL802154_ATTR_SUPPORTED_COMMANDS);
508498 if (!nl_cmds)
509499 goto nla_put_failure;
510500
....@@ -560,15 +550,8 @@
560550 struct netlink_callback *cb,
561551 struct nl802154_dump_wpan_phy_state *state)
562552 {
563
- struct nlattr **tb = genl_family_attrbuf(&nl802154_fam);
564
- int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, tb,
565
- nl802154_fam.maxattr, nl802154_policy, NULL);
566
-
567
- /* TODO check if we can handle error here,
568
- * we have no backward compatibility
569
- */
570
- if (ret)
571
- return 0;
553
+ const struct genl_dumpit_info *info = genl_dumpit_info(cb);
554
+ struct nlattr **tb = info->attrs;
572555
573556 if (tb[NL802154_ATTR_WPAN_PHY])
574557 state->filter_wpan_phy = nla_get_u32(tb[NL802154_ATTR_WPAN_PHY]);
....@@ -693,7 +676,8 @@
693676
694677 switch (desc->mode) {
695678 case NL802154_KEY_ID_MODE_IMPLICIT:
696
- nl_dev_addr = nla_nest_start(msg, NL802154_KEY_ID_ATTR_IMPLICIT);
679
+ nl_dev_addr = nla_nest_start_noflag(msg,
680
+ NL802154_KEY_ID_ATTR_IMPLICIT);
697681 if (!nl_dev_addr)
698682 return -ENOBUFS;
699683
....@@ -768,7 +752,7 @@
768752 params.frame_counter))
769753 return -ENOBUFS;
770754
771
- nl_key_id = nla_nest_start(msg, NL802154_ATTR_SEC_OUT_KEY_ID);
755
+ nl_key_id = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_OUT_KEY_ID);
772756 if (!nl_key_id)
773757 return -ENOBUFS;
774758
....@@ -1311,8 +1295,7 @@
13111295 {
13121296 struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1];
13131297
1314
- if (!nla || nla_parse_nested(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla,
1315
- nl802154_dev_addr_policy, NULL))
1298
+ if (!nla || nla_parse_nested_deprecated(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla, nl802154_dev_addr_policy, NULL))
13161299 return -EINVAL;
13171300
13181301 if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] || !attrs[NL802154_DEV_ADDR_ATTR_MODE])
....@@ -1352,8 +1335,7 @@
13521335 {
13531336 struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1];
13541337
1355
- if (!nla || nla_parse_nested(attrs, NL802154_KEY_ID_ATTR_MAX, nla,
1356
- nl802154_key_id_policy, NULL))
1338
+ if (!nla || nla_parse_nested_deprecated(attrs, NL802154_KEY_ID_ATTR_MAX, nla, nl802154_key_id_policy, NULL))
13571339 return -EINVAL;
13581340
13591341 if (!attrs[NL802154_KEY_ID_ATTR_MODE])
....@@ -1464,11 +1446,11 @@
14641446 if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex))
14651447 goto nla_put_failure;
14661448
1467
- nl_key = nla_nest_start(msg, NL802154_ATTR_SEC_KEY);
1449
+ nl_key = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_KEY);
14681450 if (!nl_key)
14691451 goto nla_put_failure;
14701452
1471
- nl_key_id = nla_nest_start(msg, NL802154_KEY_ATTR_ID);
1453
+ nl_key_id = nla_nest_start_noflag(msg, NL802154_KEY_ATTR_ID);
14721454 if (!nl_key_id)
14731455 goto nla_put_failure;
14741456
....@@ -1576,10 +1558,11 @@
15761558 struct ieee802154_llsec_key_id id = { };
15771559 u32 commands[NL802154_CMD_FRAME_NR_IDS / 32] = { };
15781560
1561
+ if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
1562
+ return -EOPNOTSUPP;
1563
+
15791564 if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
1580
- nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
1581
- info->attrs[NL802154_ATTR_SEC_KEY],
1582
- nl802154_key_policy, info->extack))
1565
+ nla_parse_nested_deprecated(attrs, NL802154_KEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_KEY], nl802154_key_policy, info->extack))
15831566 return -EINVAL;
15841567
15851568 if (!attrs[NL802154_KEY_ATTR_USAGE_FRAMES] ||
....@@ -1627,10 +1610,11 @@
16271610 struct nlattr *attrs[NL802154_KEY_ATTR_MAX + 1];
16281611 struct ieee802154_llsec_key_id id;
16291612
1613
+ if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
1614
+ return -EOPNOTSUPP;
1615
+
16301616 if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
1631
- nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
1632
- info->attrs[NL802154_ATTR_SEC_KEY],
1633
- nl802154_key_policy, info->extack))
1617
+ nla_parse_nested_deprecated(attrs, NL802154_KEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_KEY], nl802154_key_policy, info->extack))
16341618 return -EINVAL;
16351619
16361620 if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0)
....@@ -1655,7 +1639,7 @@
16551639 if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex))
16561640 goto nla_put_failure;
16571641
1658
- nl_device = nla_nest_start(msg, NL802154_ATTR_SEC_DEVICE);
1642
+ nl_device = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVICE);
16591643 if (!nl_device)
16601644 goto nla_put_failure;
16611645
....@@ -1749,8 +1733,7 @@
17491733 {
17501734 struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1];
17511735
1752
- if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
1753
- nla, nl802154_dev_policy, NULL))
1736
+ if (!nla || nla_parse_nested_deprecated(attrs, NL802154_DEV_ATTR_MAX, nla, nl802154_dev_policy, NULL))
17541737 return -EINVAL;
17551738
17561739 memset(dev, 0, sizeof(*dev));
....@@ -1804,10 +1787,11 @@
18041787 struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1];
18051788 __le64 extended_addr;
18061789
1790
+ if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
1791
+ return -EOPNOTSUPP;
1792
+
18071793 if (!info->attrs[NL802154_ATTR_SEC_DEVICE] ||
1808
- nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
1809
- info->attrs[NL802154_ATTR_SEC_DEVICE],
1810
- nl802154_dev_policy, info->extack))
1794
+ nla_parse_nested_deprecated(attrs, NL802154_DEV_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVICE], nl802154_dev_policy, info->extack))
18111795 return -EINVAL;
18121796
18131797 if (!attrs[NL802154_DEV_ATTR_EXTENDED_ADDR])
....@@ -1833,7 +1817,7 @@
18331817 if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex))
18341818 goto nla_put_failure;
18351819
1836
- nl_devkey = nla_nest_start(msg, NL802154_ATTR_SEC_DEVKEY);
1820
+ nl_devkey = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVKEY);
18371821 if (!nl_devkey)
18381822 goto nla_put_failure;
18391823
....@@ -1843,7 +1827,7 @@
18431827 devkey->frame_counter))
18441828 goto nla_put_failure;
18451829
1846
- nl_key_id = nla_nest_start(msg, NL802154_DEVKEY_ATTR_ID);
1830
+ nl_key_id = nla_nest_start_noflag(msg, NL802154_DEVKEY_ATTR_ID);
18471831 if (!nl_key_id)
18481832 goto nla_put_failure;
18491833
....@@ -1941,9 +1925,7 @@
19411925 return -EOPNOTSUPP;
19421926
19431927 if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
1944
- nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
1945
- info->attrs[NL802154_ATTR_SEC_DEVKEY],
1946
- nl802154_devkey_policy, info->extack) < 0)
1928
+ nla_parse_nested_deprecated(attrs, NL802154_DEVKEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVKEY], nl802154_devkey_policy, info->extack) < 0)
19471929 return -EINVAL;
19481930
19491931 if (!attrs[NL802154_DEVKEY_ATTR_FRAME_COUNTER] ||
....@@ -1973,10 +1955,11 @@
19731955 struct ieee802154_llsec_device_key key;
19741956 __le64 extended_addr;
19751957
1958
+ if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
1959
+ return -EOPNOTSUPP;
1960
+
19761961 if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
1977
- nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
1978
- info->attrs[NL802154_ATTR_SEC_DEVKEY],
1979
- nl802154_devkey_policy, info->extack))
1962
+ nla_parse_nested_deprecated(attrs, NL802154_DEVKEY_ATTR_MAX, info->attrs[NL802154_ATTR_SEC_DEVKEY], nl802154_devkey_policy, info->extack))
19801963 return -EINVAL;
19811964
19821965 if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR])
....@@ -2010,7 +1993,7 @@
20101993 if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex))
20111994 goto nla_put_failure;
20121995
2013
- nl_seclevel = nla_nest_start(msg, NL802154_ATTR_SEC_LEVEL);
1996
+ nl_seclevel = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_LEVEL);
20141997 if (!nl_seclevel)
20151998 goto nla_put_failure;
20161999
....@@ -2101,8 +2084,7 @@
21012084 {
21022085 struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1];
21032086
2104
- if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX,
2105
- nla, nl802154_seclevel_policy, NULL))
2087
+ if (!nla || nla_parse_nested_deprecated(attrs, NL802154_SECLEVEL_ATTR_MAX, nla, nl802154_seclevel_policy, NULL))
21062088 return -EINVAL;
21072089
21082090 memset(sl, 0, sizeof(*sl));
....@@ -2262,131 +2244,132 @@
22622244 static const struct genl_ops nl802154_ops[] = {
22632245 {
22642246 .cmd = NL802154_CMD_GET_WPAN_PHY,
2247
+ .validate = GENL_DONT_VALIDATE_STRICT |
2248
+ GENL_DONT_VALIDATE_DUMP_STRICT,
22652249 .doit = nl802154_get_wpan_phy,
22662250 .dumpit = nl802154_dump_wpan_phy,
22672251 .done = nl802154_dump_wpan_phy_done,
2268
- .policy = nl802154_policy,
22692252 /* can be retrieved by unprivileged users */
22702253 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
22712254 NL802154_FLAG_NEED_RTNL,
22722255 },
22732256 {
22742257 .cmd = NL802154_CMD_GET_INTERFACE,
2258
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
22752259 .doit = nl802154_get_interface,
22762260 .dumpit = nl802154_dump_interface,
2277
- .policy = nl802154_policy,
22782261 /* can be retrieved by unprivileged users */
22792262 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV |
22802263 NL802154_FLAG_NEED_RTNL,
22812264 },
22822265 {
22832266 .cmd = NL802154_CMD_NEW_INTERFACE,
2267
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
22842268 .doit = nl802154_new_interface,
2285
- .policy = nl802154_policy,
22862269 .flags = GENL_ADMIN_PERM,
22872270 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
22882271 NL802154_FLAG_NEED_RTNL,
22892272 },
22902273 {
22912274 .cmd = NL802154_CMD_DEL_INTERFACE,
2275
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
22922276 .doit = nl802154_del_interface,
2293
- .policy = nl802154_policy,
22942277 .flags = GENL_ADMIN_PERM,
22952278 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV |
22962279 NL802154_FLAG_NEED_RTNL,
22972280 },
22982281 {
22992282 .cmd = NL802154_CMD_SET_CHANNEL,
2283
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23002284 .doit = nl802154_set_channel,
2301
- .policy = nl802154_policy,
23022285 .flags = GENL_ADMIN_PERM,
23032286 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
23042287 NL802154_FLAG_NEED_RTNL,
23052288 },
23062289 {
23072290 .cmd = NL802154_CMD_SET_CCA_MODE,
2291
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23082292 .doit = nl802154_set_cca_mode,
2309
- .policy = nl802154_policy,
23102293 .flags = GENL_ADMIN_PERM,
23112294 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
23122295 NL802154_FLAG_NEED_RTNL,
23132296 },
23142297 {
23152298 .cmd = NL802154_CMD_SET_CCA_ED_LEVEL,
2299
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23162300 .doit = nl802154_set_cca_ed_level,
2317
- .policy = nl802154_policy,
23182301 .flags = GENL_ADMIN_PERM,
23192302 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
23202303 NL802154_FLAG_NEED_RTNL,
23212304 },
23222305 {
23232306 .cmd = NL802154_CMD_SET_TX_POWER,
2307
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23242308 .doit = nl802154_set_tx_power,
2325
- .policy = nl802154_policy,
23262309 .flags = GENL_ADMIN_PERM,
23272310 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
23282311 NL802154_FLAG_NEED_RTNL,
23292312 },
23302313 {
23312314 .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS,
2315
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23322316 .doit = nl802154_wpan_phy_netns,
2333
- .policy = nl802154_policy,
23342317 .flags = GENL_ADMIN_PERM,
23352318 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
23362319 NL802154_FLAG_NEED_RTNL,
23372320 },
23382321 {
23392322 .cmd = NL802154_CMD_SET_PAN_ID,
2323
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23402324 .doit = nl802154_set_pan_id,
2341
- .policy = nl802154_policy,
23422325 .flags = GENL_ADMIN_PERM,
23432326 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23442327 NL802154_FLAG_NEED_RTNL,
23452328 },
23462329 {
23472330 .cmd = NL802154_CMD_SET_SHORT_ADDR,
2331
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23482332 .doit = nl802154_set_short_addr,
2349
- .policy = nl802154_policy,
23502333 .flags = GENL_ADMIN_PERM,
23512334 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23522335 NL802154_FLAG_NEED_RTNL,
23532336 },
23542337 {
23552338 .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT,
2339
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23562340 .doit = nl802154_set_backoff_exponent,
2357
- .policy = nl802154_policy,
23582341 .flags = GENL_ADMIN_PERM,
23592342 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23602343 NL802154_FLAG_NEED_RTNL,
23612344 },
23622345 {
23632346 .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS,
2347
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23642348 .doit = nl802154_set_max_csma_backoffs,
2365
- .policy = nl802154_policy,
23662349 .flags = GENL_ADMIN_PERM,
23672350 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23682351 NL802154_FLAG_NEED_RTNL,
23692352 },
23702353 {
23712354 .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES,
2355
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23722356 .doit = nl802154_set_max_frame_retries,
2373
- .policy = nl802154_policy,
23742357 .flags = GENL_ADMIN_PERM,
23752358 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23762359 NL802154_FLAG_NEED_RTNL,
23772360 },
23782361 {
23792362 .cmd = NL802154_CMD_SET_LBT_MODE,
2363
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23802364 .doit = nl802154_set_lbt_mode,
2381
- .policy = nl802154_policy,
23822365 .flags = GENL_ADMIN_PERM,
23832366 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23842367 NL802154_FLAG_NEED_RTNL,
23852368 },
23862369 {
23872370 .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT,
2371
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23882372 .doit = nl802154_set_ackreq_default,
2389
- .policy = nl802154_policy,
23902373 .flags = GENL_ADMIN_PERM,
23912374 .internal_flags = NL802154_FLAG_NEED_NETDEV |
23922375 NL802154_FLAG_NEED_RTNL,
....@@ -2394,33 +2377,34 @@
23942377 #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
23952378 {
23962379 .cmd = NL802154_CMD_SET_SEC_PARAMS,
2380
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
23972381 .doit = nl802154_set_llsec_params,
2398
- .policy = nl802154_policy,
23992382 .flags = GENL_ADMIN_PERM,
24002383 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24012384 NL802154_FLAG_NEED_RTNL,
24022385 },
24032386 {
24042387 .cmd = NL802154_CMD_GET_SEC_KEY,
2388
+ .validate = GENL_DONT_VALIDATE_STRICT |
2389
+ GENL_DONT_VALIDATE_DUMP_STRICT,
24052390 /* TODO .doit by matching key id? */
24062391 .dumpit = nl802154_dump_llsec_key,
2407
- .policy = nl802154_policy,
24082392 .flags = GENL_ADMIN_PERM,
24092393 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24102394 NL802154_FLAG_NEED_RTNL,
24112395 },
24122396 {
24132397 .cmd = NL802154_CMD_NEW_SEC_KEY,
2398
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24142399 .doit = nl802154_add_llsec_key,
2415
- .policy = nl802154_policy,
24162400 .flags = GENL_ADMIN_PERM,
24172401 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24182402 NL802154_FLAG_NEED_RTNL,
24192403 },
24202404 {
24212405 .cmd = NL802154_CMD_DEL_SEC_KEY,
2406
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24222407 .doit = nl802154_del_llsec_key,
2423
- .policy = nl802154_policy,
24242408 .flags = GENL_ADMIN_PERM,
24252409 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24262410 NL802154_FLAG_NEED_RTNL,
....@@ -2428,25 +2412,26 @@
24282412 /* TODO unique identifier must short+pan OR extended_addr */
24292413 {
24302414 .cmd = NL802154_CMD_GET_SEC_DEV,
2415
+ .validate = GENL_DONT_VALIDATE_STRICT |
2416
+ GENL_DONT_VALIDATE_DUMP_STRICT,
24312417 /* TODO .doit by matching extended_addr? */
24322418 .dumpit = nl802154_dump_llsec_dev,
2433
- .policy = nl802154_policy,
24342419 .flags = GENL_ADMIN_PERM,
24352420 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24362421 NL802154_FLAG_NEED_RTNL,
24372422 },
24382423 {
24392424 .cmd = NL802154_CMD_NEW_SEC_DEV,
2425
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24402426 .doit = nl802154_add_llsec_dev,
2441
- .policy = nl802154_policy,
24422427 .flags = GENL_ADMIN_PERM,
24432428 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24442429 NL802154_FLAG_NEED_RTNL,
24452430 },
24462431 {
24472432 .cmd = NL802154_CMD_DEL_SEC_DEV,
2433
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24482434 .doit = nl802154_del_llsec_dev,
2449
- .policy = nl802154_policy,
24502435 .flags = GENL_ADMIN_PERM,
24512436 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24522437 NL802154_FLAG_NEED_RTNL,
....@@ -2454,51 +2439,53 @@
24542439 /* TODO remove complete devkey, put it as nested? */
24552440 {
24562441 .cmd = NL802154_CMD_GET_SEC_DEVKEY,
2442
+ .validate = GENL_DONT_VALIDATE_STRICT |
2443
+ GENL_DONT_VALIDATE_DUMP_STRICT,
24572444 /* TODO doit by matching ??? */
24582445 .dumpit = nl802154_dump_llsec_devkey,
2459
- .policy = nl802154_policy,
24602446 .flags = GENL_ADMIN_PERM,
24612447 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24622448 NL802154_FLAG_NEED_RTNL,
24632449 },
24642450 {
24652451 .cmd = NL802154_CMD_NEW_SEC_DEVKEY,
2452
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24662453 .doit = nl802154_add_llsec_devkey,
2467
- .policy = nl802154_policy,
24682454 .flags = GENL_ADMIN_PERM,
24692455 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24702456 NL802154_FLAG_NEED_RTNL,
24712457 },
24722458 {
24732459 .cmd = NL802154_CMD_DEL_SEC_DEVKEY,
2460
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24742461 .doit = nl802154_del_llsec_devkey,
2475
- .policy = nl802154_policy,
24762462 .flags = GENL_ADMIN_PERM,
24772463 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24782464 NL802154_FLAG_NEED_RTNL,
24792465 },
24802466 {
24812467 .cmd = NL802154_CMD_GET_SEC_LEVEL,
2468
+ .validate = GENL_DONT_VALIDATE_STRICT |
2469
+ GENL_DONT_VALIDATE_DUMP_STRICT,
24822470 /* TODO .doit by matching frame_type? */
24832471 .dumpit = nl802154_dump_llsec_seclevel,
2484
- .policy = nl802154_policy,
24852472 .flags = GENL_ADMIN_PERM,
24862473 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24872474 NL802154_FLAG_NEED_RTNL,
24882475 },
24892476 {
24902477 .cmd = NL802154_CMD_NEW_SEC_LEVEL,
2478
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24912479 .doit = nl802154_add_llsec_seclevel,
2492
- .policy = nl802154_policy,
24932480 .flags = GENL_ADMIN_PERM,
24942481 .internal_flags = NL802154_FLAG_NEED_NETDEV |
24952482 NL802154_FLAG_NEED_RTNL,
24962483 },
24972484 {
24982485 .cmd = NL802154_CMD_DEL_SEC_LEVEL,
2486
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24992487 /* TODO match frame_type only? */
25002488 .doit = nl802154_del_llsec_seclevel,
2501
- .policy = nl802154_policy,
25022489 .flags = GENL_ADMIN_PERM,
25032490 .internal_flags = NL802154_FLAG_NEED_NETDEV |
25042491 NL802154_FLAG_NEED_RTNL,
....@@ -2511,6 +2498,7 @@
25112498 .hdrsize = 0, /* no private header */
25122499 .version = 1, /* no particular meaning now */
25132500 .maxattr = NL802154_ATTR_MAX,
2501
+ .policy = nl802154_policy,
25142502 .netnsok = true,
25152503 .pre_doit = nl802154_pre_doit,
25162504 .post_doit = nl802154_post_doit,