| .. | .. |
|---|
| 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 | +/* |
|---|
| 9 | 3 | * |
|---|
| 10 | 4 | * Authors: |
|---|
| 11 | 5 | * Alexander Aring <aar@pengutronix.de> |
|---|
| .. | .. |
|---|
| 242 | 236 | struct cfg802154_registered_device **rdev, |
|---|
| 243 | 237 | struct wpan_dev **wpan_dev) |
|---|
| 244 | 238 | { |
|---|
| 239 | + const struct genl_dumpit_info *info = genl_dumpit_info(cb); |
|---|
| 245 | 240 | int err; |
|---|
| 246 | 241 | |
|---|
| 247 | 242 | rtnl_lock(); |
|---|
| 248 | 243 | |
|---|
| 249 | 244 | 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 | | - |
|---|
| 256 | 245 | *wpan_dev = __cfg802154_wpan_dev_from_attrs(sock_net(skb->sk), |
|---|
| 257 | | - genl_family_attrbuf(&nl802154_fam)); |
|---|
| 246 | + info->attrs); |
|---|
| 258 | 247 | if (IS_ERR(*wpan_dev)) { |
|---|
| 259 | 248 | err = PTR_ERR(*wpan_dev); |
|---|
| 260 | 249 | goto out_unlock; |
|---|
| .. | .. |
|---|
| 312 | 301 | static int |
|---|
| 313 | 302 | nl802154_put_flags(struct sk_buff *msg, int attr, u32 mask) |
|---|
| 314 | 303 | { |
|---|
| 315 | | - struct nlattr *nl_flags = nla_nest_start(msg, attr); |
|---|
| 304 | + struct nlattr *nl_flags = nla_nest_start_noflag(msg, attr); |
|---|
| 316 | 305 | int i; |
|---|
| 317 | 306 | |
|---|
| 318 | 307 | if (!nl_flags) |
|---|
| .. | .. |
|---|
| 338 | 327 | struct nlattr *nl_page; |
|---|
| 339 | 328 | unsigned long page; |
|---|
| 340 | 329 | |
|---|
| 341 | | - nl_page = nla_nest_start(msg, NL802154_ATTR_CHANNELS_SUPPORTED); |
|---|
| 330 | + nl_page = nla_nest_start_noflag(msg, NL802154_ATTR_CHANNELS_SUPPORTED); |
|---|
| 342 | 331 | if (!nl_page) |
|---|
| 343 | 332 | return -ENOBUFS; |
|---|
| 344 | 333 | |
|---|
| .. | .. |
|---|
| 360 | 349 | struct nlattr *nl_caps, *nl_channels; |
|---|
| 361 | 350 | int i; |
|---|
| 362 | 351 | |
|---|
| 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); |
|---|
| 364 | 353 | if (!nl_caps) |
|---|
| 365 | 354 | return -ENOBUFS; |
|---|
| 366 | 355 | |
|---|
| 367 | | - nl_channels = nla_nest_start(msg, NL802154_CAP_ATTR_CHANNELS); |
|---|
| 356 | + nl_channels = nla_nest_start_noflag(msg, NL802154_CAP_ATTR_CHANNELS); |
|---|
| 368 | 357 | if (!nl_channels) |
|---|
| 369 | 358 | return -ENOBUFS; |
|---|
| 370 | 359 | |
|---|
| .. | .. |
|---|
| 380 | 369 | if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_CCA_ED_LEVEL) { |
|---|
| 381 | 370 | struct nlattr *nl_ed_lvls; |
|---|
| 382 | 371 | |
|---|
| 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); |
|---|
| 385 | 374 | if (!nl_ed_lvls) |
|---|
| 386 | 375 | return -ENOBUFS; |
|---|
| 387 | 376 | |
|---|
| .. | .. |
|---|
| 396 | 385 | if (rdev->wpan_phy.flags & WPAN_PHY_FLAG_TXPOWER) { |
|---|
| 397 | 386 | struct nlattr *nl_tx_pwrs; |
|---|
| 398 | 387 | |
|---|
| 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); |
|---|
| 400 | 390 | if (!nl_tx_pwrs) |
|---|
| 401 | 391 | return -ENOBUFS; |
|---|
| 402 | 392 | |
|---|
| .. | .. |
|---|
| 504 | 494 | if (nl802154_put_capabilities(msg, rdev)) |
|---|
| 505 | 495 | goto nla_put_failure; |
|---|
| 506 | 496 | |
|---|
| 507 | | - nl_cmds = nla_nest_start(msg, NL802154_ATTR_SUPPORTED_COMMANDS); |
|---|
| 497 | + nl_cmds = nla_nest_start_noflag(msg, NL802154_ATTR_SUPPORTED_COMMANDS); |
|---|
| 508 | 498 | if (!nl_cmds) |
|---|
| 509 | 499 | goto nla_put_failure; |
|---|
| 510 | 500 | |
|---|
| .. | .. |
|---|
| 560 | 550 | struct netlink_callback *cb, |
|---|
| 561 | 551 | struct nl802154_dump_wpan_phy_state *state) |
|---|
| 562 | 552 | { |
|---|
| 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; |
|---|
| 572 | 555 | |
|---|
| 573 | 556 | if (tb[NL802154_ATTR_WPAN_PHY]) |
|---|
| 574 | 557 | state->filter_wpan_phy = nla_get_u32(tb[NL802154_ATTR_WPAN_PHY]); |
|---|
| .. | .. |
|---|
| 693 | 676 | |
|---|
| 694 | 677 | switch (desc->mode) { |
|---|
| 695 | 678 | 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); |
|---|
| 697 | 681 | if (!nl_dev_addr) |
|---|
| 698 | 682 | return -ENOBUFS; |
|---|
| 699 | 683 | |
|---|
| .. | .. |
|---|
| 768 | 752 | params.frame_counter)) |
|---|
| 769 | 753 | return -ENOBUFS; |
|---|
| 770 | 754 | |
|---|
| 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); |
|---|
| 772 | 756 | if (!nl_key_id) |
|---|
| 773 | 757 | return -ENOBUFS; |
|---|
| 774 | 758 | |
|---|
| .. | .. |
|---|
| 1311 | 1295 | { |
|---|
| 1312 | 1296 | struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1]; |
|---|
| 1313 | 1297 | |
|---|
| 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)) |
|---|
| 1316 | 1299 | return -EINVAL; |
|---|
| 1317 | 1300 | |
|---|
| 1318 | 1301 | if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] || !attrs[NL802154_DEV_ADDR_ATTR_MODE]) |
|---|
| .. | .. |
|---|
| 1352 | 1335 | { |
|---|
| 1353 | 1336 | struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1]; |
|---|
| 1354 | 1337 | |
|---|
| 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)) |
|---|
| 1357 | 1339 | return -EINVAL; |
|---|
| 1358 | 1340 | |
|---|
| 1359 | 1341 | if (!attrs[NL802154_KEY_ID_ATTR_MODE]) |
|---|
| .. | .. |
|---|
| 1464 | 1446 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
|---|
| 1465 | 1447 | goto nla_put_failure; |
|---|
| 1466 | 1448 | |
|---|
| 1467 | | - nl_key = nla_nest_start(msg, NL802154_ATTR_SEC_KEY); |
|---|
| 1449 | + nl_key = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_KEY); |
|---|
| 1468 | 1450 | if (!nl_key) |
|---|
| 1469 | 1451 | goto nla_put_failure; |
|---|
| 1470 | 1452 | |
|---|
| 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); |
|---|
| 1472 | 1454 | if (!nl_key_id) |
|---|
| 1473 | 1455 | goto nla_put_failure; |
|---|
| 1474 | 1456 | |
|---|
| .. | .. |
|---|
| 1576 | 1558 | struct ieee802154_llsec_key_id id = { }; |
|---|
| 1577 | 1559 | u32 commands[NL802154_CMD_FRAME_NR_IDS / 32] = { }; |
|---|
| 1578 | 1560 | |
|---|
| 1561 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
|---|
| 1562 | + return -EOPNOTSUPP; |
|---|
| 1563 | + |
|---|
| 1579 | 1564 | 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)) |
|---|
| 1583 | 1566 | return -EINVAL; |
|---|
| 1584 | 1567 | |
|---|
| 1585 | 1568 | if (!attrs[NL802154_KEY_ATTR_USAGE_FRAMES] || |
|---|
| .. | .. |
|---|
| 1627 | 1610 | struct nlattr *attrs[NL802154_KEY_ATTR_MAX + 1]; |
|---|
| 1628 | 1611 | struct ieee802154_llsec_key_id id; |
|---|
| 1629 | 1612 | |
|---|
| 1613 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
|---|
| 1614 | + return -EOPNOTSUPP; |
|---|
| 1615 | + |
|---|
| 1630 | 1616 | 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)) |
|---|
| 1634 | 1618 | return -EINVAL; |
|---|
| 1635 | 1619 | |
|---|
| 1636 | 1620 | if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0) |
|---|
| .. | .. |
|---|
| 1655 | 1639 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
|---|
| 1656 | 1640 | goto nla_put_failure; |
|---|
| 1657 | 1641 | |
|---|
| 1658 | | - nl_device = nla_nest_start(msg, NL802154_ATTR_SEC_DEVICE); |
|---|
| 1642 | + nl_device = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVICE); |
|---|
| 1659 | 1643 | if (!nl_device) |
|---|
| 1660 | 1644 | goto nla_put_failure; |
|---|
| 1661 | 1645 | |
|---|
| .. | .. |
|---|
| 1749 | 1733 | { |
|---|
| 1750 | 1734 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; |
|---|
| 1751 | 1735 | |
|---|
| 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)) |
|---|
| 1754 | 1737 | return -EINVAL; |
|---|
| 1755 | 1738 | |
|---|
| 1756 | 1739 | memset(dev, 0, sizeof(*dev)); |
|---|
| .. | .. |
|---|
| 1804 | 1787 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; |
|---|
| 1805 | 1788 | __le64 extended_addr; |
|---|
| 1806 | 1789 | |
|---|
| 1790 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
|---|
| 1791 | + return -EOPNOTSUPP; |
|---|
| 1792 | + |
|---|
| 1807 | 1793 | 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)) |
|---|
| 1811 | 1795 | return -EINVAL; |
|---|
| 1812 | 1796 | |
|---|
| 1813 | 1797 | if (!attrs[NL802154_DEV_ATTR_EXTENDED_ADDR]) |
|---|
| .. | .. |
|---|
| 1833 | 1817 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
|---|
| 1834 | 1818 | goto nla_put_failure; |
|---|
| 1835 | 1819 | |
|---|
| 1836 | | - nl_devkey = nla_nest_start(msg, NL802154_ATTR_SEC_DEVKEY); |
|---|
| 1820 | + nl_devkey = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_DEVKEY); |
|---|
| 1837 | 1821 | if (!nl_devkey) |
|---|
| 1838 | 1822 | goto nla_put_failure; |
|---|
| 1839 | 1823 | |
|---|
| .. | .. |
|---|
| 1843 | 1827 | devkey->frame_counter)) |
|---|
| 1844 | 1828 | goto nla_put_failure; |
|---|
| 1845 | 1829 | |
|---|
| 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); |
|---|
| 1847 | 1831 | if (!nl_key_id) |
|---|
| 1848 | 1832 | goto nla_put_failure; |
|---|
| 1849 | 1833 | |
|---|
| .. | .. |
|---|
| 1941 | 1925 | return -EOPNOTSUPP; |
|---|
| 1942 | 1926 | |
|---|
| 1943 | 1927 | 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) |
|---|
| 1947 | 1929 | return -EINVAL; |
|---|
| 1948 | 1930 | |
|---|
| 1949 | 1931 | if (!attrs[NL802154_DEVKEY_ATTR_FRAME_COUNTER] || |
|---|
| .. | .. |
|---|
| 1973 | 1955 | struct ieee802154_llsec_device_key key; |
|---|
| 1974 | 1956 | __le64 extended_addr; |
|---|
| 1975 | 1957 | |
|---|
| 1958 | + if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR) |
|---|
| 1959 | + return -EOPNOTSUPP; |
|---|
| 1960 | + |
|---|
| 1976 | 1961 | 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)) |
|---|
| 1980 | 1963 | return -EINVAL; |
|---|
| 1981 | 1964 | |
|---|
| 1982 | 1965 | if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR]) |
|---|
| .. | .. |
|---|
| 2010 | 1993 | if (nla_put_u32(msg, NL802154_ATTR_IFINDEX, dev->ifindex)) |
|---|
| 2011 | 1994 | goto nla_put_failure; |
|---|
| 2012 | 1995 | |
|---|
| 2013 | | - nl_seclevel = nla_nest_start(msg, NL802154_ATTR_SEC_LEVEL); |
|---|
| 1996 | + nl_seclevel = nla_nest_start_noflag(msg, NL802154_ATTR_SEC_LEVEL); |
|---|
| 2014 | 1997 | if (!nl_seclevel) |
|---|
| 2015 | 1998 | goto nla_put_failure; |
|---|
| 2016 | 1999 | |
|---|
| .. | .. |
|---|
| 2101 | 2084 | { |
|---|
| 2102 | 2085 | struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1]; |
|---|
| 2103 | 2086 | |
|---|
| 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)) |
|---|
| 2106 | 2088 | return -EINVAL; |
|---|
| 2107 | 2089 | |
|---|
| 2108 | 2090 | memset(sl, 0, sizeof(*sl)); |
|---|
| .. | .. |
|---|
| 2262 | 2244 | static const struct genl_ops nl802154_ops[] = { |
|---|
| 2263 | 2245 | { |
|---|
| 2264 | 2246 | .cmd = NL802154_CMD_GET_WPAN_PHY, |
|---|
| 2247 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 2248 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 2265 | 2249 | .doit = nl802154_get_wpan_phy, |
|---|
| 2266 | 2250 | .dumpit = nl802154_dump_wpan_phy, |
|---|
| 2267 | 2251 | .done = nl802154_dump_wpan_phy_done, |
|---|
| 2268 | | - .policy = nl802154_policy, |
|---|
| 2269 | 2252 | /* can be retrieved by unprivileged users */ |
|---|
| 2270 | 2253 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2271 | 2254 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2272 | 2255 | }, |
|---|
| 2273 | 2256 | { |
|---|
| 2274 | 2257 | .cmd = NL802154_CMD_GET_INTERFACE, |
|---|
| 2258 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2275 | 2259 | .doit = nl802154_get_interface, |
|---|
| 2276 | 2260 | .dumpit = nl802154_dump_interface, |
|---|
| 2277 | | - .policy = nl802154_policy, |
|---|
| 2278 | 2261 | /* can be retrieved by unprivileged users */ |
|---|
| 2279 | 2262 | .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | |
|---|
| 2280 | 2263 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2281 | 2264 | }, |
|---|
| 2282 | 2265 | { |
|---|
| 2283 | 2266 | .cmd = NL802154_CMD_NEW_INTERFACE, |
|---|
| 2267 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2284 | 2268 | .doit = nl802154_new_interface, |
|---|
| 2285 | | - .policy = nl802154_policy, |
|---|
| 2286 | 2269 | .flags = GENL_ADMIN_PERM, |
|---|
| 2287 | 2270 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2288 | 2271 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2289 | 2272 | }, |
|---|
| 2290 | 2273 | { |
|---|
| 2291 | 2274 | .cmd = NL802154_CMD_DEL_INTERFACE, |
|---|
| 2275 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2292 | 2276 | .doit = nl802154_del_interface, |
|---|
| 2293 | | - .policy = nl802154_policy, |
|---|
| 2294 | 2277 | .flags = GENL_ADMIN_PERM, |
|---|
| 2295 | 2278 | .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | |
|---|
| 2296 | 2279 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2297 | 2280 | }, |
|---|
| 2298 | 2281 | { |
|---|
| 2299 | 2282 | .cmd = NL802154_CMD_SET_CHANNEL, |
|---|
| 2283 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2300 | 2284 | .doit = nl802154_set_channel, |
|---|
| 2301 | | - .policy = nl802154_policy, |
|---|
| 2302 | 2285 | .flags = GENL_ADMIN_PERM, |
|---|
| 2303 | 2286 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2304 | 2287 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2305 | 2288 | }, |
|---|
| 2306 | 2289 | { |
|---|
| 2307 | 2290 | .cmd = NL802154_CMD_SET_CCA_MODE, |
|---|
| 2291 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2308 | 2292 | .doit = nl802154_set_cca_mode, |
|---|
| 2309 | | - .policy = nl802154_policy, |
|---|
| 2310 | 2293 | .flags = GENL_ADMIN_PERM, |
|---|
| 2311 | 2294 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2312 | 2295 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2313 | 2296 | }, |
|---|
| 2314 | 2297 | { |
|---|
| 2315 | 2298 | .cmd = NL802154_CMD_SET_CCA_ED_LEVEL, |
|---|
| 2299 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2316 | 2300 | .doit = nl802154_set_cca_ed_level, |
|---|
| 2317 | | - .policy = nl802154_policy, |
|---|
| 2318 | 2301 | .flags = GENL_ADMIN_PERM, |
|---|
| 2319 | 2302 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2320 | 2303 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2321 | 2304 | }, |
|---|
| 2322 | 2305 | { |
|---|
| 2323 | 2306 | .cmd = NL802154_CMD_SET_TX_POWER, |
|---|
| 2307 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2324 | 2308 | .doit = nl802154_set_tx_power, |
|---|
| 2325 | | - .policy = nl802154_policy, |
|---|
| 2326 | 2309 | .flags = GENL_ADMIN_PERM, |
|---|
| 2327 | 2310 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2328 | 2311 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2329 | 2312 | }, |
|---|
| 2330 | 2313 | { |
|---|
| 2331 | 2314 | .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS, |
|---|
| 2315 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2332 | 2316 | .doit = nl802154_wpan_phy_netns, |
|---|
| 2333 | | - .policy = nl802154_policy, |
|---|
| 2334 | 2317 | .flags = GENL_ADMIN_PERM, |
|---|
| 2335 | 2318 | .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | |
|---|
| 2336 | 2319 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2337 | 2320 | }, |
|---|
| 2338 | 2321 | { |
|---|
| 2339 | 2322 | .cmd = NL802154_CMD_SET_PAN_ID, |
|---|
| 2323 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2340 | 2324 | .doit = nl802154_set_pan_id, |
|---|
| 2341 | | - .policy = nl802154_policy, |
|---|
| 2342 | 2325 | .flags = GENL_ADMIN_PERM, |
|---|
| 2343 | 2326 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2344 | 2327 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2345 | 2328 | }, |
|---|
| 2346 | 2329 | { |
|---|
| 2347 | 2330 | .cmd = NL802154_CMD_SET_SHORT_ADDR, |
|---|
| 2331 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2348 | 2332 | .doit = nl802154_set_short_addr, |
|---|
| 2349 | | - .policy = nl802154_policy, |
|---|
| 2350 | 2333 | .flags = GENL_ADMIN_PERM, |
|---|
| 2351 | 2334 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2352 | 2335 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2353 | 2336 | }, |
|---|
| 2354 | 2337 | { |
|---|
| 2355 | 2338 | .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT, |
|---|
| 2339 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2356 | 2340 | .doit = nl802154_set_backoff_exponent, |
|---|
| 2357 | | - .policy = nl802154_policy, |
|---|
| 2358 | 2341 | .flags = GENL_ADMIN_PERM, |
|---|
| 2359 | 2342 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2360 | 2343 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2361 | 2344 | }, |
|---|
| 2362 | 2345 | { |
|---|
| 2363 | 2346 | .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS, |
|---|
| 2347 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2364 | 2348 | .doit = nl802154_set_max_csma_backoffs, |
|---|
| 2365 | | - .policy = nl802154_policy, |
|---|
| 2366 | 2349 | .flags = GENL_ADMIN_PERM, |
|---|
| 2367 | 2350 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2368 | 2351 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2369 | 2352 | }, |
|---|
| 2370 | 2353 | { |
|---|
| 2371 | 2354 | .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES, |
|---|
| 2355 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2372 | 2356 | .doit = nl802154_set_max_frame_retries, |
|---|
| 2373 | | - .policy = nl802154_policy, |
|---|
| 2374 | 2357 | .flags = GENL_ADMIN_PERM, |
|---|
| 2375 | 2358 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2376 | 2359 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2377 | 2360 | }, |
|---|
| 2378 | 2361 | { |
|---|
| 2379 | 2362 | .cmd = NL802154_CMD_SET_LBT_MODE, |
|---|
| 2363 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2380 | 2364 | .doit = nl802154_set_lbt_mode, |
|---|
| 2381 | | - .policy = nl802154_policy, |
|---|
| 2382 | 2365 | .flags = GENL_ADMIN_PERM, |
|---|
| 2383 | 2366 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2384 | 2367 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2385 | 2368 | }, |
|---|
| 2386 | 2369 | { |
|---|
| 2387 | 2370 | .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT, |
|---|
| 2371 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2388 | 2372 | .doit = nl802154_set_ackreq_default, |
|---|
| 2389 | | - .policy = nl802154_policy, |
|---|
| 2390 | 2373 | .flags = GENL_ADMIN_PERM, |
|---|
| 2391 | 2374 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2392 | 2375 | NL802154_FLAG_NEED_RTNL, |
|---|
| .. | .. |
|---|
| 2394 | 2377 | #ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL |
|---|
| 2395 | 2378 | { |
|---|
| 2396 | 2379 | .cmd = NL802154_CMD_SET_SEC_PARAMS, |
|---|
| 2380 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2397 | 2381 | .doit = nl802154_set_llsec_params, |
|---|
| 2398 | | - .policy = nl802154_policy, |
|---|
| 2399 | 2382 | .flags = GENL_ADMIN_PERM, |
|---|
| 2400 | 2383 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2401 | 2384 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2402 | 2385 | }, |
|---|
| 2403 | 2386 | { |
|---|
| 2404 | 2387 | .cmd = NL802154_CMD_GET_SEC_KEY, |
|---|
| 2388 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 2389 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 2405 | 2390 | /* TODO .doit by matching key id? */ |
|---|
| 2406 | 2391 | .dumpit = nl802154_dump_llsec_key, |
|---|
| 2407 | | - .policy = nl802154_policy, |
|---|
| 2408 | 2392 | .flags = GENL_ADMIN_PERM, |
|---|
| 2409 | 2393 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2410 | 2394 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2411 | 2395 | }, |
|---|
| 2412 | 2396 | { |
|---|
| 2413 | 2397 | .cmd = NL802154_CMD_NEW_SEC_KEY, |
|---|
| 2398 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2414 | 2399 | .doit = nl802154_add_llsec_key, |
|---|
| 2415 | | - .policy = nl802154_policy, |
|---|
| 2416 | 2400 | .flags = GENL_ADMIN_PERM, |
|---|
| 2417 | 2401 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2418 | 2402 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2419 | 2403 | }, |
|---|
| 2420 | 2404 | { |
|---|
| 2421 | 2405 | .cmd = NL802154_CMD_DEL_SEC_KEY, |
|---|
| 2406 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2422 | 2407 | .doit = nl802154_del_llsec_key, |
|---|
| 2423 | | - .policy = nl802154_policy, |
|---|
| 2424 | 2408 | .flags = GENL_ADMIN_PERM, |
|---|
| 2425 | 2409 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2426 | 2410 | NL802154_FLAG_NEED_RTNL, |
|---|
| .. | .. |
|---|
| 2428 | 2412 | /* TODO unique identifier must short+pan OR extended_addr */ |
|---|
| 2429 | 2413 | { |
|---|
| 2430 | 2414 | .cmd = NL802154_CMD_GET_SEC_DEV, |
|---|
| 2415 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 2416 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 2431 | 2417 | /* TODO .doit by matching extended_addr? */ |
|---|
| 2432 | 2418 | .dumpit = nl802154_dump_llsec_dev, |
|---|
| 2433 | | - .policy = nl802154_policy, |
|---|
| 2434 | 2419 | .flags = GENL_ADMIN_PERM, |
|---|
| 2435 | 2420 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2436 | 2421 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2437 | 2422 | }, |
|---|
| 2438 | 2423 | { |
|---|
| 2439 | 2424 | .cmd = NL802154_CMD_NEW_SEC_DEV, |
|---|
| 2425 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2440 | 2426 | .doit = nl802154_add_llsec_dev, |
|---|
| 2441 | | - .policy = nl802154_policy, |
|---|
| 2442 | 2427 | .flags = GENL_ADMIN_PERM, |
|---|
| 2443 | 2428 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2444 | 2429 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2445 | 2430 | }, |
|---|
| 2446 | 2431 | { |
|---|
| 2447 | 2432 | .cmd = NL802154_CMD_DEL_SEC_DEV, |
|---|
| 2433 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2448 | 2434 | .doit = nl802154_del_llsec_dev, |
|---|
| 2449 | | - .policy = nl802154_policy, |
|---|
| 2450 | 2435 | .flags = GENL_ADMIN_PERM, |
|---|
| 2451 | 2436 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2452 | 2437 | NL802154_FLAG_NEED_RTNL, |
|---|
| .. | .. |
|---|
| 2454 | 2439 | /* TODO remove complete devkey, put it as nested? */ |
|---|
| 2455 | 2440 | { |
|---|
| 2456 | 2441 | .cmd = NL802154_CMD_GET_SEC_DEVKEY, |
|---|
| 2442 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 2443 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 2457 | 2444 | /* TODO doit by matching ??? */ |
|---|
| 2458 | 2445 | .dumpit = nl802154_dump_llsec_devkey, |
|---|
| 2459 | | - .policy = nl802154_policy, |
|---|
| 2460 | 2446 | .flags = GENL_ADMIN_PERM, |
|---|
| 2461 | 2447 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2462 | 2448 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2463 | 2449 | }, |
|---|
| 2464 | 2450 | { |
|---|
| 2465 | 2451 | .cmd = NL802154_CMD_NEW_SEC_DEVKEY, |
|---|
| 2452 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2466 | 2453 | .doit = nl802154_add_llsec_devkey, |
|---|
| 2467 | | - .policy = nl802154_policy, |
|---|
| 2468 | 2454 | .flags = GENL_ADMIN_PERM, |
|---|
| 2469 | 2455 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2470 | 2456 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2471 | 2457 | }, |
|---|
| 2472 | 2458 | { |
|---|
| 2473 | 2459 | .cmd = NL802154_CMD_DEL_SEC_DEVKEY, |
|---|
| 2460 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2474 | 2461 | .doit = nl802154_del_llsec_devkey, |
|---|
| 2475 | | - .policy = nl802154_policy, |
|---|
| 2476 | 2462 | .flags = GENL_ADMIN_PERM, |
|---|
| 2477 | 2463 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2478 | 2464 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2479 | 2465 | }, |
|---|
| 2480 | 2466 | { |
|---|
| 2481 | 2467 | .cmd = NL802154_CMD_GET_SEC_LEVEL, |
|---|
| 2468 | + .validate = GENL_DONT_VALIDATE_STRICT | |
|---|
| 2469 | + GENL_DONT_VALIDATE_DUMP_STRICT, |
|---|
| 2482 | 2470 | /* TODO .doit by matching frame_type? */ |
|---|
| 2483 | 2471 | .dumpit = nl802154_dump_llsec_seclevel, |
|---|
| 2484 | | - .policy = nl802154_policy, |
|---|
| 2485 | 2472 | .flags = GENL_ADMIN_PERM, |
|---|
| 2486 | 2473 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2487 | 2474 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2488 | 2475 | }, |
|---|
| 2489 | 2476 | { |
|---|
| 2490 | 2477 | .cmd = NL802154_CMD_NEW_SEC_LEVEL, |
|---|
| 2478 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2491 | 2479 | .doit = nl802154_add_llsec_seclevel, |
|---|
| 2492 | | - .policy = nl802154_policy, |
|---|
| 2493 | 2480 | .flags = GENL_ADMIN_PERM, |
|---|
| 2494 | 2481 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2495 | 2482 | NL802154_FLAG_NEED_RTNL, |
|---|
| 2496 | 2483 | }, |
|---|
| 2497 | 2484 | { |
|---|
| 2498 | 2485 | .cmd = NL802154_CMD_DEL_SEC_LEVEL, |
|---|
| 2486 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 2499 | 2487 | /* TODO match frame_type only? */ |
|---|
| 2500 | 2488 | .doit = nl802154_del_llsec_seclevel, |
|---|
| 2501 | | - .policy = nl802154_policy, |
|---|
| 2502 | 2489 | .flags = GENL_ADMIN_PERM, |
|---|
| 2503 | 2490 | .internal_flags = NL802154_FLAG_NEED_NETDEV | |
|---|
| 2504 | 2491 | NL802154_FLAG_NEED_RTNL, |
|---|
| .. | .. |
|---|
| 2511 | 2498 | .hdrsize = 0, /* no private header */ |
|---|
| 2512 | 2499 | .version = 1, /* no particular meaning now */ |
|---|
| 2513 | 2500 | .maxattr = NL802154_ATTR_MAX, |
|---|
| 2501 | + .policy = nl802154_policy, |
|---|
| 2514 | 2502 | .netnsok = true, |
|---|
| 2515 | 2503 | .pre_doit = nl802154_pre_doit, |
|---|
| 2516 | 2504 | .post_doit = nl802154_post_doit, |
|---|