summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2019-04-26 08:07:31 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-27 17:07:22 -0400
commitef6243acb4782df587a4d7d6c310fa5b5d82684b (patch)
tree81b4175fc03c61adbb8935f5f7b8ce02589c65dd
parent56738f460841761abc70347c919d5c45f6f05a42 (diff)
genetlink: optionally validate strictly/dumps
Add options to strictly validate messages and dump messages, sometimes perhaps validating dump messages non-strictly may be required, so add an option for that as well. Since none of this can really be applied to existing commands, set the options everwhere using the following spatch: @@ identifier ops; expression X; @@ struct genl_ops ops[] = { ..., { .cmd = X, + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, ... }, ... }; For new commands one should just not copy the .validate 'opt-out' flags and thus get strict validation. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/block/nbd.c4
-rw-r--r--drivers/net/gtp.c3
-rw-r--r--drivers/net/ieee802154/mac802154_hwsim.c6
-rw-r--r--drivers/net/macsec.c10
-rw-r--r--drivers/net/team/team.c4
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c6
-rw-r--r--drivers/target/target_core_user.c4
-rw-r--r--fs/dlm/netlink.c1
-rw-r--r--include/net/genetlink.h7
-rw-r--r--kernel/taskstats.c2
-rw-r--r--net/batman-adv/netlink.c18
-rw-r--r--net/core/devlink.c38
-rw-r--r--net/core/drop_monitor.c3
-rw-r--r--net/hsr/hsr_netlink.c2
-rw-r--r--net/ieee802154/nl802154.c29
-rw-r--r--net/ipv4/fou.c3
-rw-r--r--net/ipv4/tcp_metrics.c2
-rw-r--r--net/ipv6/ila/ila_main.c4
-rw-r--r--net/ipv6/seg6.c4
-rw-r--r--net/l2tp/l2tp_netlink.c9
-rw-r--r--net/ncsi/ncsi-netlink.c6
-rw-r--r--net/netfilter/ipvs/ip_vs_ctl.c16
-rw-r--r--net/netlabel/netlabel_calipso.c4
-rw-r--r--net/netlabel/netlabel_cipso_v4.c4
-rw-r--r--net/netlabel/netlabel_mgmt.c8
-rw-r--r--net/netlabel/netlabel_unlabeled.c8
-rw-r--r--net/netlink/genetlink.c29
-rw-r--r--net/nfc/netlink.c19
-rw-r--r--net/openvswitch/conntrack.c3
-rw-r--r--net/openvswitch/datapath.c13
-rw-r--r--net/openvswitch/meter.c4
-rw-r--r--net/psample/psample.c1
-rw-r--r--net/smc/smc_pnet.c4
-rw-r--r--net/tipc/netlink.c21
-rw-r--r--net/tipc/netlink_compat.c1
-rw-r--r--net/wimax/stack.c4
-rw-r--r--net/wireless/nl80211.c104
37 files changed, 405 insertions, 3 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 69dc11f907a3..6c2dd268e603 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -2003,18 +2003,22 @@ out:
2003static const struct genl_ops nbd_connect_genl_ops[] = { 2003static const struct genl_ops nbd_connect_genl_ops[] = {
2004 { 2004 {
2005 .cmd = NBD_CMD_CONNECT, 2005 .cmd = NBD_CMD_CONNECT,
2006 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2006 .doit = nbd_genl_connect, 2007 .doit = nbd_genl_connect,
2007 }, 2008 },
2008 { 2009 {
2009 .cmd = NBD_CMD_DISCONNECT, 2010 .cmd = NBD_CMD_DISCONNECT,
2011 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2010 .doit = nbd_genl_disconnect, 2012 .doit = nbd_genl_disconnect,
2011 }, 2013 },
2012 { 2014 {
2013 .cmd = NBD_CMD_RECONFIGURE, 2015 .cmd = NBD_CMD_RECONFIGURE,
2016 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2014 .doit = nbd_genl_reconfigure, 2017 .doit = nbd_genl_reconfigure,
2015 }, 2018 },
2016 { 2019 {
2017 .cmd = NBD_CMD_STATUS, 2020 .cmd = NBD_CMD_STATUS,
2021 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2018 .doit = nbd_genl_status, 2022 .doit = nbd_genl_status,
2019 }, 2023 },
2020}; 2024};
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index c06e31747288..eaf4311b4004 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -1270,16 +1270,19 @@ static const struct nla_policy gtp_genl_policy[GTPA_MAX + 1] = {
1270static const struct genl_ops gtp_genl_ops[] = { 1270static const struct genl_ops gtp_genl_ops[] = {
1271 { 1271 {
1272 .cmd = GTP_CMD_NEWPDP, 1272 .cmd = GTP_CMD_NEWPDP,
1273 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1273 .doit = gtp_genl_new_pdp, 1274 .doit = gtp_genl_new_pdp,
1274 .flags = GENL_ADMIN_PERM, 1275 .flags = GENL_ADMIN_PERM,
1275 }, 1276 },
1276 { 1277 {
1277 .cmd = GTP_CMD_DELPDP, 1278 .cmd = GTP_CMD_DELPDP,
1279 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1278 .doit = gtp_genl_del_pdp, 1280 .doit = gtp_genl_del_pdp,
1279 .flags = GENL_ADMIN_PERM, 1281 .flags = GENL_ADMIN_PERM,
1280 }, 1282 },
1281 { 1283 {
1282 .cmd = GTP_CMD_GETPDP, 1284 .cmd = GTP_CMD_GETPDP,
1285 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1283 .doit = gtp_genl_get_pdp, 1286 .doit = gtp_genl_get_pdp,
1284 .dumpit = gtp_genl_dump_pdp, 1287 .dumpit = gtp_genl_dump_pdp,
1285 .flags = GENL_ADMIN_PERM, 1288 .flags = GENL_ADMIN_PERM,
diff --git a/drivers/net/ieee802154/mac802154_hwsim.c b/drivers/net/ieee802154/mac802154_hwsim.c
index 486a3a3bf35b..b187ae1a6bd6 100644
--- a/drivers/net/ieee802154/mac802154_hwsim.c
+++ b/drivers/net/ieee802154/mac802154_hwsim.c
@@ -594,31 +594,37 @@ static const struct nla_policy hwsim_genl_policy[MAC802154_HWSIM_ATTR_MAX + 1] =
594static const struct genl_ops hwsim_nl_ops[] = { 594static const struct genl_ops hwsim_nl_ops[] = {
595 { 595 {
596 .cmd = MAC802154_HWSIM_CMD_NEW_RADIO, 596 .cmd = MAC802154_HWSIM_CMD_NEW_RADIO,
597 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
597 .doit = hwsim_new_radio_nl, 598 .doit = hwsim_new_radio_nl,
598 .flags = GENL_UNS_ADMIN_PERM, 599 .flags = GENL_UNS_ADMIN_PERM,
599 }, 600 },
600 { 601 {
601 .cmd = MAC802154_HWSIM_CMD_DEL_RADIO, 602 .cmd = MAC802154_HWSIM_CMD_DEL_RADIO,
603 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
602 .doit = hwsim_del_radio_nl, 604 .doit = hwsim_del_radio_nl,
603 .flags = GENL_UNS_ADMIN_PERM, 605 .flags = GENL_UNS_ADMIN_PERM,
604 }, 606 },
605 { 607 {
606 .cmd = MAC802154_HWSIM_CMD_GET_RADIO, 608 .cmd = MAC802154_HWSIM_CMD_GET_RADIO,
609 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
607 .doit = hwsim_get_radio_nl, 610 .doit = hwsim_get_radio_nl,
608 .dumpit = hwsim_dump_radio_nl, 611 .dumpit = hwsim_dump_radio_nl,
609 }, 612 },
610 { 613 {
611 .cmd = MAC802154_HWSIM_CMD_NEW_EDGE, 614 .cmd = MAC802154_HWSIM_CMD_NEW_EDGE,
615 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
612 .doit = hwsim_new_edge_nl, 616 .doit = hwsim_new_edge_nl,
613 .flags = GENL_UNS_ADMIN_PERM, 617 .flags = GENL_UNS_ADMIN_PERM,
614 }, 618 },
615 { 619 {
616 .cmd = MAC802154_HWSIM_CMD_DEL_EDGE, 620 .cmd = MAC802154_HWSIM_CMD_DEL_EDGE,
621 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
617 .doit = hwsim_del_edge_nl, 622 .doit = hwsim_del_edge_nl,
618 .flags = GENL_UNS_ADMIN_PERM, 623 .flags = GENL_UNS_ADMIN_PERM,
619 }, 624 },
620 { 625 {
621 .cmd = MAC802154_HWSIM_CMD_SET_EDGE, 626 .cmd = MAC802154_HWSIM_CMD_SET_EDGE,
627 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
622 .doit = hwsim_set_edge_lqi, 628 .doit = hwsim_set_edge_lqi,
623 .flags = GENL_UNS_ADMIN_PERM, 629 .flags = GENL_UNS_ADMIN_PERM,
624 }, 630 },
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index c3fa3d8da8f3..009b2902c9d3 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2637,50 +2637,60 @@ done:
2637static const struct genl_ops macsec_genl_ops[] = { 2637static const struct genl_ops macsec_genl_ops[] = {
2638 { 2638 {
2639 .cmd = MACSEC_CMD_GET_TXSC, 2639 .cmd = MACSEC_CMD_GET_TXSC,
2640 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2640 .dumpit = macsec_dump_txsc, 2641 .dumpit = macsec_dump_txsc,
2641 }, 2642 },
2642 { 2643 {
2643 .cmd = MACSEC_CMD_ADD_RXSC, 2644 .cmd = MACSEC_CMD_ADD_RXSC,
2645 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2644 .doit = macsec_add_rxsc, 2646 .doit = macsec_add_rxsc,
2645 .flags = GENL_ADMIN_PERM, 2647 .flags = GENL_ADMIN_PERM,
2646 }, 2648 },
2647 { 2649 {
2648 .cmd = MACSEC_CMD_DEL_RXSC, 2650 .cmd = MACSEC_CMD_DEL_RXSC,
2651 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2649 .doit = macsec_del_rxsc, 2652 .doit = macsec_del_rxsc,
2650 .flags = GENL_ADMIN_PERM, 2653 .flags = GENL_ADMIN_PERM,
2651 }, 2654 },
2652 { 2655 {
2653 .cmd = MACSEC_CMD_UPD_RXSC, 2656 .cmd = MACSEC_CMD_UPD_RXSC,
2657 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2654 .doit = macsec_upd_rxsc, 2658 .doit = macsec_upd_rxsc,
2655 .flags = GENL_ADMIN_PERM, 2659 .flags = GENL_ADMIN_PERM,
2656 }, 2660 },
2657 { 2661 {
2658 .cmd = MACSEC_CMD_ADD_TXSA, 2662 .cmd = MACSEC_CMD_ADD_TXSA,
2663 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2659 .doit = macsec_add_txsa, 2664 .doit = macsec_add_txsa,
2660 .flags = GENL_ADMIN_PERM, 2665 .flags = GENL_ADMIN_PERM,
2661 }, 2666 },
2662 { 2667 {
2663 .cmd = MACSEC_CMD_DEL_TXSA, 2668 .cmd = MACSEC_CMD_DEL_TXSA,
2669 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2664 .doit = macsec_del_txsa, 2670 .doit = macsec_del_txsa,
2665 .flags = GENL_ADMIN_PERM, 2671 .flags = GENL_ADMIN_PERM,
2666 }, 2672 },
2667 { 2673 {
2668 .cmd = MACSEC_CMD_UPD_TXSA, 2674 .cmd = MACSEC_CMD_UPD_TXSA,
2675 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2669 .doit = macsec_upd_txsa, 2676 .doit = macsec_upd_txsa,
2670 .flags = GENL_ADMIN_PERM, 2677 .flags = GENL_ADMIN_PERM,
2671 }, 2678 },
2672 { 2679 {
2673 .cmd = MACSEC_CMD_ADD_RXSA, 2680 .cmd = MACSEC_CMD_ADD_RXSA,
2681 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2674 .doit = macsec_add_rxsa, 2682 .doit = macsec_add_rxsa,
2675 .flags = GENL_ADMIN_PERM, 2683 .flags = GENL_ADMIN_PERM,
2676 }, 2684 },
2677 { 2685 {
2678 .cmd = MACSEC_CMD_DEL_RXSA, 2686 .cmd = MACSEC_CMD_DEL_RXSA,
2687 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2679 .doit = macsec_del_rxsa, 2688 .doit = macsec_del_rxsa,
2680 .flags = GENL_ADMIN_PERM, 2689 .flags = GENL_ADMIN_PERM,
2681 }, 2690 },
2682 { 2691 {
2683 .cmd = MACSEC_CMD_UPD_RXSA, 2692 .cmd = MACSEC_CMD_UPD_RXSA,
2693 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2684 .doit = macsec_upd_rxsa, 2694 .doit = macsec_upd_rxsa,
2685 .flags = GENL_ADMIN_PERM, 2695 .flags = GENL_ADMIN_PERM,
2686 }, 2696 },
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index be58445afbbc..2106045b3e16 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2757,20 +2757,24 @@ static int team_nl_cmd_port_list_get(struct sk_buff *skb,
2757static const struct genl_ops team_nl_ops[] = { 2757static const struct genl_ops team_nl_ops[] = {
2758 { 2758 {
2759 .cmd = TEAM_CMD_NOOP, 2759 .cmd = TEAM_CMD_NOOP,
2760 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2760 .doit = team_nl_cmd_noop, 2761 .doit = team_nl_cmd_noop,
2761 }, 2762 },
2762 { 2763 {
2763 .cmd = TEAM_CMD_OPTIONS_SET, 2764 .cmd = TEAM_CMD_OPTIONS_SET,
2765 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2764 .doit = team_nl_cmd_options_set, 2766 .doit = team_nl_cmd_options_set,
2765 .flags = GENL_ADMIN_PERM, 2767 .flags = GENL_ADMIN_PERM,
2766 }, 2768 },
2767 { 2769 {
2768 .cmd = TEAM_CMD_OPTIONS_GET, 2770 .cmd = TEAM_CMD_OPTIONS_GET,
2771 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2769 .doit = team_nl_cmd_options_get, 2772 .doit = team_nl_cmd_options_get,
2770 .flags = GENL_ADMIN_PERM, 2773 .flags = GENL_ADMIN_PERM,
2771 }, 2774 },
2772 { 2775 {
2773 .cmd = TEAM_CMD_PORT_LIST_GET, 2776 .cmd = TEAM_CMD_PORT_LIST_GET,
2777 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2774 .doit = team_nl_cmd_port_list_get, 2778 .doit = team_nl_cmd_port_list_get,
2775 .flags = GENL_ADMIN_PERM, 2779 .flags = GENL_ADMIN_PERM,
2776 }, 2780 },
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 2a1aa2f6e7dc..0dcb511f44e2 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -3637,29 +3637,35 @@ done:
3637static const struct genl_ops hwsim_ops[] = { 3637static const struct genl_ops hwsim_ops[] = {
3638 { 3638 {
3639 .cmd = HWSIM_CMD_REGISTER, 3639 .cmd = HWSIM_CMD_REGISTER,
3640 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3640 .doit = hwsim_register_received_nl, 3641 .doit = hwsim_register_received_nl,
3641 .flags = GENL_UNS_ADMIN_PERM, 3642 .flags = GENL_UNS_ADMIN_PERM,
3642 }, 3643 },
3643 { 3644 {
3644 .cmd = HWSIM_CMD_FRAME, 3645 .cmd = HWSIM_CMD_FRAME,
3646 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3645 .doit = hwsim_cloned_frame_received_nl, 3647 .doit = hwsim_cloned_frame_received_nl,
3646 }, 3648 },
3647 { 3649 {
3648 .cmd = HWSIM_CMD_TX_INFO_FRAME, 3650 .cmd = HWSIM_CMD_TX_INFO_FRAME,
3651 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3649 .doit = hwsim_tx_info_frame_received_nl, 3652 .doit = hwsim_tx_info_frame_received_nl,
3650 }, 3653 },
3651 { 3654 {
3652 .cmd = HWSIM_CMD_NEW_RADIO, 3655 .cmd = HWSIM_CMD_NEW_RADIO,
3656 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3653 .doit = hwsim_new_radio_nl, 3657 .doit = hwsim_new_radio_nl,
3654 .flags = GENL_UNS_ADMIN_PERM, 3658 .flags = GENL_UNS_ADMIN_PERM,
3655 }, 3659 },
3656 { 3660 {
3657 .cmd = HWSIM_CMD_DEL_RADIO, 3661 .cmd = HWSIM_CMD_DEL_RADIO,
3662 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3658 .doit = hwsim_del_radio_nl, 3663 .doit = hwsim_del_radio_nl,
3659 .flags = GENL_UNS_ADMIN_PERM, 3664 .flags = GENL_UNS_ADMIN_PERM,
3660 }, 3665 },
3661 { 3666 {
3662 .cmd = HWSIM_CMD_GET_RADIO, 3667 .cmd = HWSIM_CMD_GET_RADIO,
3668 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3663 .doit = hwsim_get_radio_nl, 3669 .doit = hwsim_get_radio_nl,
3664 .dumpit = hwsim_dump_radio_nl, 3670 .dumpit = hwsim_dump_radio_nl,
3665 }, 3671 },
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index 481d371c4b01..40b29ca5a98d 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -441,21 +441,25 @@ static int tcmu_genl_set_features(struct sk_buff *skb, struct genl_info *info)
441static const struct genl_ops tcmu_genl_ops[] = { 441static const struct genl_ops tcmu_genl_ops[] = {
442 { 442 {
443 .cmd = TCMU_CMD_SET_FEATURES, 443 .cmd = TCMU_CMD_SET_FEATURES,
444 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
444 .flags = GENL_ADMIN_PERM, 445 .flags = GENL_ADMIN_PERM,
445 .doit = tcmu_genl_set_features, 446 .doit = tcmu_genl_set_features,
446 }, 447 },
447 { 448 {
448 .cmd = TCMU_CMD_ADDED_DEVICE_DONE, 449 .cmd = TCMU_CMD_ADDED_DEVICE_DONE,
450 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
449 .flags = GENL_ADMIN_PERM, 451 .flags = GENL_ADMIN_PERM,
450 .doit = tcmu_genl_add_dev_done, 452 .doit = tcmu_genl_add_dev_done,
451 }, 453 },
452 { 454 {
453 .cmd = TCMU_CMD_REMOVED_DEVICE_DONE, 455 .cmd = TCMU_CMD_REMOVED_DEVICE_DONE,
456 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
454 .flags = GENL_ADMIN_PERM, 457 .flags = GENL_ADMIN_PERM,
455 .doit = tcmu_genl_rm_dev_done, 458 .doit = tcmu_genl_rm_dev_done,
456 }, 459 },
457 { 460 {
458 .cmd = TCMU_CMD_RECONFIG_DEVICE_DONE, 461 .cmd = TCMU_CMD_RECONFIG_DEVICE_DONE,
462 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
459 .flags = GENL_ADMIN_PERM, 463 .flags = GENL_ADMIN_PERM,
460 .doit = tcmu_genl_reconfig_dev_done, 464 .doit = tcmu_genl_reconfig_dev_done,
461 }, 465 },
diff --git a/fs/dlm/netlink.c b/fs/dlm/netlink.c
index 43a96c330570..d8e27defa89f 100644
--- a/fs/dlm/netlink.c
+++ b/fs/dlm/netlink.c
@@ -68,6 +68,7 @@ static int user_cmd(struct sk_buff *skb, struct genl_info *info)
68static const struct genl_ops dlm_nl_ops[] = { 68static const struct genl_ops dlm_nl_ops[] = {
69 { 69 {
70 .cmd = DLM_CMD_HELLO, 70 .cmd = DLM_CMD_HELLO,
71 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
71 .doit = user_cmd, 72 .doit = user_cmd,
72 }, 73 },
73}; 74};
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index 68de579cfe5e..9292f1c588b7 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -121,6 +121,12 @@ static inline int genl_err_attr(struct genl_info *info, int err,
121 return err; 121 return err;
122} 122}
123 123
124enum genl_validate_flags {
125 GENL_DONT_VALIDATE_STRICT = BIT(0),
126 GENL_DONT_VALIDATE_DUMP = BIT(1),
127 GENL_DONT_VALIDATE_DUMP_STRICT = BIT(2),
128};
129
124/** 130/**
125 * struct genl_ops - generic netlink operations 131 * struct genl_ops - generic netlink operations
126 * @cmd: command identifier 132 * @cmd: command identifier
@@ -141,6 +147,7 @@ struct genl_ops {
141 u8 cmd; 147 u8 cmd;
142 u8 internal_flags; 148 u8 internal_flags;
143 u8 flags; 149 u8 flags;
150 u8 validate;
144}; 151};
145 152
146int genl_register_family(struct genl_family *family); 153int genl_register_family(struct genl_family *family);
diff --git a/kernel/taskstats.c b/kernel/taskstats.c
index 0e347f1c7800..5f852b8f59f7 100644
--- a/kernel/taskstats.c
+++ b/kernel/taskstats.c
@@ -649,12 +649,14 @@ err:
649static const struct genl_ops taskstats_ops[] = { 649static const struct genl_ops taskstats_ops[] = {
650 { 650 {
651 .cmd = TASKSTATS_CMD_GET, 651 .cmd = TASKSTATS_CMD_GET,
652 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
652 .doit = taskstats_user_cmd, 653 .doit = taskstats_user_cmd,
653 /* policy enforced later */ 654 /* policy enforced later */
654 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_HASPOL, 655 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_HASPOL,
655 }, 656 },
656 { 657 {
657 .cmd = CGROUPSTATS_CMD_GET, 658 .cmd = CGROUPSTATS_CMD_GET,
659 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
658 .doit = cgroupstats_user_cmd, 660 .doit = cgroupstats_user_cmd,
659 /* policy enforced later */ 661 /* policy enforced later */
660 .flags = GENL_CMD_CAP_HASPOL, 662 .flags = GENL_CMD_CAP_HASPOL,
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
index e7907308b331..a67720fad46c 100644
--- a/net/batman-adv/netlink.c
+++ b/net/batman-adv/netlink.c
@@ -1343,29 +1343,34 @@ static void batadv_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
1343static const struct genl_ops batadv_netlink_ops[] = { 1343static const struct genl_ops batadv_netlink_ops[] = {
1344 { 1344 {
1345 .cmd = BATADV_CMD_GET_MESH, 1345 .cmd = BATADV_CMD_GET_MESH,
1346 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1346 /* can be retrieved by unprivileged users */ 1347 /* can be retrieved by unprivileged users */
1347 .doit = batadv_netlink_get_mesh, 1348 .doit = batadv_netlink_get_mesh,
1348 .internal_flags = BATADV_FLAG_NEED_MESH, 1349 .internal_flags = BATADV_FLAG_NEED_MESH,
1349 }, 1350 },
1350 { 1351 {
1351 .cmd = BATADV_CMD_TP_METER, 1352 .cmd = BATADV_CMD_TP_METER,
1353 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1352 .flags = GENL_ADMIN_PERM, 1354 .flags = GENL_ADMIN_PERM,
1353 .doit = batadv_netlink_tp_meter_start, 1355 .doit = batadv_netlink_tp_meter_start,
1354 .internal_flags = BATADV_FLAG_NEED_MESH, 1356 .internal_flags = BATADV_FLAG_NEED_MESH,
1355 }, 1357 },
1356 { 1358 {
1357 .cmd = BATADV_CMD_TP_METER_CANCEL, 1359 .cmd = BATADV_CMD_TP_METER_CANCEL,
1360 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1358 .flags = GENL_ADMIN_PERM, 1361 .flags = GENL_ADMIN_PERM,
1359 .doit = batadv_netlink_tp_meter_cancel, 1362 .doit = batadv_netlink_tp_meter_cancel,
1360 .internal_flags = BATADV_FLAG_NEED_MESH, 1363 .internal_flags = BATADV_FLAG_NEED_MESH,
1361 }, 1364 },
1362 { 1365 {
1363 .cmd = BATADV_CMD_GET_ROUTING_ALGOS, 1366 .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
1367 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1364 .flags = GENL_ADMIN_PERM, 1368 .flags = GENL_ADMIN_PERM,
1365 .dumpit = batadv_algo_dump, 1369 .dumpit = batadv_algo_dump,
1366 }, 1370 },
1367 { 1371 {
1368 .cmd = BATADV_CMD_GET_HARDIF, 1372 .cmd = BATADV_CMD_GET_HARDIF,
1373 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1369 /* can be retrieved by unprivileged users */ 1374 /* can be retrieved by unprivileged users */
1370 .dumpit = batadv_netlink_dump_hardif, 1375 .dumpit = batadv_netlink_dump_hardif,
1371 .doit = batadv_netlink_get_hardif, 1376 .doit = batadv_netlink_get_hardif,
@@ -1374,57 +1379,68 @@ static const struct genl_ops batadv_netlink_ops[] = {
1374 }, 1379 },
1375 { 1380 {
1376 .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL, 1381 .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL,
1382 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1377 .flags = GENL_ADMIN_PERM, 1383 .flags = GENL_ADMIN_PERM,
1378 .dumpit = batadv_tt_local_dump, 1384 .dumpit = batadv_tt_local_dump,
1379 }, 1385 },
1380 { 1386 {
1381 .cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL, 1387 .cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL,
1388 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1382 .flags = GENL_ADMIN_PERM, 1389 .flags = GENL_ADMIN_PERM,
1383 .dumpit = batadv_tt_global_dump, 1390 .dumpit = batadv_tt_global_dump,
1384 }, 1391 },
1385 { 1392 {
1386 .cmd = BATADV_CMD_GET_ORIGINATORS, 1393 .cmd = BATADV_CMD_GET_ORIGINATORS,
1394 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1387 .flags = GENL_ADMIN_PERM, 1395 .flags = GENL_ADMIN_PERM,
1388 .dumpit = batadv_orig_dump, 1396 .dumpit = batadv_orig_dump,
1389 }, 1397 },
1390 { 1398 {
1391 .cmd = BATADV_CMD_GET_NEIGHBORS, 1399 .cmd = BATADV_CMD_GET_NEIGHBORS,
1400 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1392 .flags = GENL_ADMIN_PERM, 1401 .flags = GENL_ADMIN_PERM,
1393 .dumpit = batadv_hardif_neigh_dump, 1402 .dumpit = batadv_hardif_neigh_dump,
1394 }, 1403 },
1395 { 1404 {
1396 .cmd = BATADV_CMD_GET_GATEWAYS, 1405 .cmd = BATADV_CMD_GET_GATEWAYS,
1406 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1397 .flags = GENL_ADMIN_PERM, 1407 .flags = GENL_ADMIN_PERM,
1398 .dumpit = batadv_gw_dump, 1408 .dumpit = batadv_gw_dump,
1399 }, 1409 },
1400 { 1410 {
1401 .cmd = BATADV_CMD_GET_BLA_CLAIM, 1411 .cmd = BATADV_CMD_GET_BLA_CLAIM,
1412 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1402 .flags = GENL_ADMIN_PERM, 1413 .flags = GENL_ADMIN_PERM,
1403 .dumpit = batadv_bla_claim_dump, 1414 .dumpit = batadv_bla_claim_dump,
1404 }, 1415 },
1405 { 1416 {
1406 .cmd = BATADV_CMD_GET_BLA_BACKBONE, 1417 .cmd = BATADV_CMD_GET_BLA_BACKBONE,
1418 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1407 .flags = GENL_ADMIN_PERM, 1419 .flags = GENL_ADMIN_PERM,
1408 .dumpit = batadv_bla_backbone_dump, 1420 .dumpit = batadv_bla_backbone_dump,
1409 }, 1421 },
1410 { 1422 {
1411 .cmd = BATADV_CMD_GET_DAT_CACHE, 1423 .cmd = BATADV_CMD_GET_DAT_CACHE,
1424 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1412 .flags = GENL_ADMIN_PERM, 1425 .flags = GENL_ADMIN_PERM,
1413 .dumpit = batadv_dat_cache_dump, 1426 .dumpit = batadv_dat_cache_dump,
1414 }, 1427 },
1415 { 1428 {
1416 .cmd = BATADV_CMD_GET_MCAST_FLAGS, 1429 .cmd = BATADV_CMD_GET_MCAST_FLAGS,
1430 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1417 .flags = GENL_ADMIN_PERM, 1431 .flags = GENL_ADMIN_PERM,
1418 .dumpit = batadv_mcast_flags_dump, 1432 .dumpit = batadv_mcast_flags_dump,
1419 }, 1433 },
1420 { 1434 {
1421 .cmd = BATADV_CMD_SET_MESH, 1435 .cmd = BATADV_CMD_SET_MESH,
1436 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1422 .flags = GENL_ADMIN_PERM, 1437 .flags = GENL_ADMIN_PERM,
1423 .doit = batadv_netlink_set_mesh, 1438 .doit = batadv_netlink_set_mesh,
1424 .internal_flags = BATADV_FLAG_NEED_MESH, 1439 .internal_flags = BATADV_FLAG_NEED_MESH,
1425 }, 1440 },
1426 { 1441 {
1427 .cmd = BATADV_CMD_SET_HARDIF, 1442 .cmd = BATADV_CMD_SET_HARDIF,
1443 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1428 .flags = GENL_ADMIN_PERM, 1444 .flags = GENL_ADMIN_PERM,
1429 .doit = batadv_netlink_set_hardif, 1445 .doit = batadv_netlink_set_hardif,
1430 .internal_flags = BATADV_FLAG_NEED_MESH | 1446 .internal_flags = BATADV_FLAG_NEED_MESH |
@@ -1432,6 +1448,7 @@ static const struct genl_ops batadv_netlink_ops[] = {
1432 }, 1448 },
1433 { 1449 {
1434 .cmd = BATADV_CMD_GET_VLAN, 1450 .cmd = BATADV_CMD_GET_VLAN,
1451 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1435 /* can be retrieved by unprivileged users */ 1452 /* can be retrieved by unprivileged users */
1436 .doit = batadv_netlink_get_vlan, 1453 .doit = batadv_netlink_get_vlan,
1437 .internal_flags = BATADV_FLAG_NEED_MESH | 1454 .internal_flags = BATADV_FLAG_NEED_MESH |
@@ -1439,6 +1456,7 @@ static const struct genl_ops batadv_netlink_ops[] = {
1439 }, 1456 },
1440 { 1457 {
1441 .cmd = BATADV_CMD_SET_VLAN, 1458 .cmd = BATADV_CMD_SET_VLAN,
1459 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1442 .flags = GENL_ADMIN_PERM, 1460 .flags = GENL_ADMIN_PERM,
1443 .doit = batadv_netlink_set_vlan, 1461 .doit = batadv_netlink_set_vlan,
1444 .internal_flags = BATADV_FLAG_NEED_MESH | 1462 .internal_flags = BATADV_FLAG_NEED_MESH |
diff --git a/net/core/devlink.c b/net/core/devlink.c
index b020d182c9fc..4e28d04c0165 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -4948,6 +4948,7 @@ static const struct nla_policy devlink_nl_policy[DEVLINK_ATTR_MAX + 1] = {
4948static const struct genl_ops devlink_nl_ops[] = { 4948static const struct genl_ops devlink_nl_ops[] = {
4949 { 4949 {
4950 .cmd = DEVLINK_CMD_GET, 4950 .cmd = DEVLINK_CMD_GET,
4951 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4951 .doit = devlink_nl_cmd_get_doit, 4952 .doit = devlink_nl_cmd_get_doit,
4952 .dumpit = devlink_nl_cmd_get_dumpit, 4953 .dumpit = devlink_nl_cmd_get_dumpit,
4953 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 4954 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
@@ -4955,6 +4956,7 @@ static const struct genl_ops devlink_nl_ops[] = {
4955 }, 4956 },
4956 { 4957 {
4957 .cmd = DEVLINK_CMD_PORT_GET, 4958 .cmd = DEVLINK_CMD_PORT_GET,
4959 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4958 .doit = devlink_nl_cmd_port_get_doit, 4960 .doit = devlink_nl_cmd_port_get_doit,
4959 .dumpit = devlink_nl_cmd_port_get_dumpit, 4961 .dumpit = devlink_nl_cmd_port_get_dumpit,
4960 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 4962 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
@@ -4962,12 +4964,14 @@ static const struct genl_ops devlink_nl_ops[] = {
4962 }, 4964 },
4963 { 4965 {
4964 .cmd = DEVLINK_CMD_PORT_SET, 4966 .cmd = DEVLINK_CMD_PORT_SET,
4967 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4965 .doit = devlink_nl_cmd_port_set_doit, 4968 .doit = devlink_nl_cmd_port_set_doit,
4966 .flags = GENL_ADMIN_PERM, 4969 .flags = GENL_ADMIN_PERM,
4967 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 4970 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
4968 }, 4971 },
4969 { 4972 {
4970 .cmd = DEVLINK_CMD_PORT_SPLIT, 4973 .cmd = DEVLINK_CMD_PORT_SPLIT,
4974 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4971 .doit = devlink_nl_cmd_port_split_doit, 4975 .doit = devlink_nl_cmd_port_split_doit,
4972 .flags = GENL_ADMIN_PERM, 4976 .flags = GENL_ADMIN_PERM,
4973 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4977 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -4975,6 +4979,7 @@ static const struct genl_ops devlink_nl_ops[] = {
4975 }, 4979 },
4976 { 4980 {
4977 .cmd = DEVLINK_CMD_PORT_UNSPLIT, 4981 .cmd = DEVLINK_CMD_PORT_UNSPLIT,
4982 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4978 .doit = devlink_nl_cmd_port_unsplit_doit, 4983 .doit = devlink_nl_cmd_port_unsplit_doit,
4979 .flags = GENL_ADMIN_PERM, 4984 .flags = GENL_ADMIN_PERM,
4980 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4985 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -4982,6 +4987,7 @@ static const struct genl_ops devlink_nl_ops[] = {
4982 }, 4987 },
4983 { 4988 {
4984 .cmd = DEVLINK_CMD_SB_GET, 4989 .cmd = DEVLINK_CMD_SB_GET,
4990 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4985 .doit = devlink_nl_cmd_sb_get_doit, 4991 .doit = devlink_nl_cmd_sb_get_doit,
4986 .dumpit = devlink_nl_cmd_sb_get_dumpit, 4992 .dumpit = devlink_nl_cmd_sb_get_dumpit,
4987 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4993 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -4990,6 +4996,7 @@ static const struct genl_ops devlink_nl_ops[] = {
4990 }, 4996 },
4991 { 4997 {
4992 .cmd = DEVLINK_CMD_SB_POOL_GET, 4998 .cmd = DEVLINK_CMD_SB_POOL_GET,
4999 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
4993 .doit = devlink_nl_cmd_sb_pool_get_doit, 5000 .doit = devlink_nl_cmd_sb_pool_get_doit,
4994 .dumpit = devlink_nl_cmd_sb_pool_get_dumpit, 5001 .dumpit = devlink_nl_cmd_sb_pool_get_dumpit,
4995 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5002 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -4998,6 +5005,7 @@ static const struct genl_ops devlink_nl_ops[] = {
4998 }, 5005 },
4999 { 5006 {
5000 .cmd = DEVLINK_CMD_SB_POOL_SET, 5007 .cmd = DEVLINK_CMD_SB_POOL_SET,
5008 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5001 .doit = devlink_nl_cmd_sb_pool_set_doit, 5009 .doit = devlink_nl_cmd_sb_pool_set_doit,
5002 .flags = GENL_ADMIN_PERM, 5010 .flags = GENL_ADMIN_PERM,
5003 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5011 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5005,6 +5013,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5005 }, 5013 },
5006 { 5014 {
5007 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 5015 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
5016 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5008 .doit = devlink_nl_cmd_sb_port_pool_get_doit, 5017 .doit = devlink_nl_cmd_sb_port_pool_get_doit,
5009 .dumpit = devlink_nl_cmd_sb_port_pool_get_dumpit, 5018 .dumpit = devlink_nl_cmd_sb_port_pool_get_dumpit,
5010 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 5019 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
@@ -5013,6 +5022,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5013 }, 5022 },
5014 { 5023 {
5015 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET, 5024 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
5025 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5016 .doit = devlink_nl_cmd_sb_port_pool_set_doit, 5026 .doit = devlink_nl_cmd_sb_port_pool_set_doit,
5017 .flags = GENL_ADMIN_PERM, 5027 .flags = GENL_ADMIN_PERM,
5018 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 5028 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
@@ -5020,6 +5030,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5020 }, 5030 },
5021 { 5031 {
5022 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 5032 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
5033 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5023 .doit = devlink_nl_cmd_sb_tc_pool_bind_get_doit, 5034 .doit = devlink_nl_cmd_sb_tc_pool_bind_get_doit,
5024 .dumpit = devlink_nl_cmd_sb_tc_pool_bind_get_dumpit, 5035 .dumpit = devlink_nl_cmd_sb_tc_pool_bind_get_dumpit,
5025 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 5036 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
@@ -5028,6 +5039,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5028 }, 5039 },
5029 { 5040 {
5030 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET, 5041 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
5042 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5031 .doit = devlink_nl_cmd_sb_tc_pool_bind_set_doit, 5043 .doit = devlink_nl_cmd_sb_tc_pool_bind_set_doit,
5032 .flags = GENL_ADMIN_PERM, 5044 .flags = GENL_ADMIN_PERM,
5033 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 5045 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
@@ -5035,6 +5047,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5035 }, 5047 },
5036 { 5048 {
5037 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT, 5049 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
5050 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5038 .doit = devlink_nl_cmd_sb_occ_snapshot_doit, 5051 .doit = devlink_nl_cmd_sb_occ_snapshot_doit,
5039 .flags = GENL_ADMIN_PERM, 5052 .flags = GENL_ADMIN_PERM,
5040 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5053 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5042,6 +5055,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5042 }, 5055 },
5043 { 5056 {
5044 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR, 5057 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
5058 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5045 .doit = devlink_nl_cmd_sb_occ_max_clear_doit, 5059 .doit = devlink_nl_cmd_sb_occ_max_clear_doit,
5046 .flags = GENL_ADMIN_PERM, 5060 .flags = GENL_ADMIN_PERM,
5047 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5061 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5049,12 +5063,14 @@ static const struct genl_ops devlink_nl_ops[] = {
5049 }, 5063 },
5050 { 5064 {
5051 .cmd = DEVLINK_CMD_ESWITCH_GET, 5065 .cmd = DEVLINK_CMD_ESWITCH_GET,
5066 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5052 .doit = devlink_nl_cmd_eswitch_get_doit, 5067 .doit = devlink_nl_cmd_eswitch_get_doit,
5053 .flags = GENL_ADMIN_PERM, 5068 .flags = GENL_ADMIN_PERM,
5054 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5069 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5055 }, 5070 },
5056 { 5071 {
5057 .cmd = DEVLINK_CMD_ESWITCH_SET, 5072 .cmd = DEVLINK_CMD_ESWITCH_SET,
5073 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5058 .doit = devlink_nl_cmd_eswitch_set_doit, 5074 .doit = devlink_nl_cmd_eswitch_set_doit,
5059 .flags = GENL_ADMIN_PERM, 5075 .flags = GENL_ADMIN_PERM,
5060 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5076 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5062,42 +5078,49 @@ static const struct genl_ops devlink_nl_ops[] = {
5062 }, 5078 },
5063 { 5079 {
5064 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET, 5080 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
5081 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5065 .doit = devlink_nl_cmd_dpipe_table_get, 5082 .doit = devlink_nl_cmd_dpipe_table_get,
5066 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5083 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5067 /* can be retrieved by unprivileged users */ 5084 /* can be retrieved by unprivileged users */
5068 }, 5085 },
5069 { 5086 {
5070 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET, 5087 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
5088 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5071 .doit = devlink_nl_cmd_dpipe_entries_get, 5089 .doit = devlink_nl_cmd_dpipe_entries_get,
5072 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5090 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5073 /* can be retrieved by unprivileged users */ 5091 /* can be retrieved by unprivileged users */
5074 }, 5092 },
5075 { 5093 {
5076 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET, 5094 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
5095 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5077 .doit = devlink_nl_cmd_dpipe_headers_get, 5096 .doit = devlink_nl_cmd_dpipe_headers_get,
5078 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5097 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5079 /* can be retrieved by unprivileged users */ 5098 /* can be retrieved by unprivileged users */
5080 }, 5099 },
5081 { 5100 {
5082 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET, 5101 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
5102 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5083 .doit = devlink_nl_cmd_dpipe_table_counters_set, 5103 .doit = devlink_nl_cmd_dpipe_table_counters_set,
5084 .flags = GENL_ADMIN_PERM, 5104 .flags = GENL_ADMIN_PERM,
5085 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5105 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5086 }, 5106 },
5087 { 5107 {
5088 .cmd = DEVLINK_CMD_RESOURCE_SET, 5108 .cmd = DEVLINK_CMD_RESOURCE_SET,
5109 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5089 .doit = devlink_nl_cmd_resource_set, 5110 .doit = devlink_nl_cmd_resource_set,
5090 .flags = GENL_ADMIN_PERM, 5111 .flags = GENL_ADMIN_PERM,
5091 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5112 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5092 }, 5113 },
5093 { 5114 {
5094 .cmd = DEVLINK_CMD_RESOURCE_DUMP, 5115 .cmd = DEVLINK_CMD_RESOURCE_DUMP,
5116 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5095 .doit = devlink_nl_cmd_resource_dump, 5117 .doit = devlink_nl_cmd_resource_dump,
5096 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5118 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5097 /* can be retrieved by unprivileged users */ 5119 /* can be retrieved by unprivileged users */
5098 }, 5120 },
5099 { 5121 {
5100 .cmd = DEVLINK_CMD_RELOAD, 5122 .cmd = DEVLINK_CMD_RELOAD,
5123 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5101 .doit = devlink_nl_cmd_reload, 5124 .doit = devlink_nl_cmd_reload,
5102 .flags = GENL_ADMIN_PERM, 5125 .flags = GENL_ADMIN_PERM,
5103 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5126 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5105,6 +5128,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5105 }, 5128 },
5106 { 5129 {
5107 .cmd = DEVLINK_CMD_PARAM_GET, 5130 .cmd = DEVLINK_CMD_PARAM_GET,
5131 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5108 .doit = devlink_nl_cmd_param_get_doit, 5132 .doit = devlink_nl_cmd_param_get_doit,
5109 .dumpit = devlink_nl_cmd_param_get_dumpit, 5133 .dumpit = devlink_nl_cmd_param_get_dumpit,
5110 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5134 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
@@ -5112,12 +5136,14 @@ static const struct genl_ops devlink_nl_ops[] = {
5112 }, 5136 },
5113 { 5137 {
5114 .cmd = DEVLINK_CMD_PARAM_SET, 5138 .cmd = DEVLINK_CMD_PARAM_SET,
5139 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5115 .doit = devlink_nl_cmd_param_set_doit, 5140 .doit = devlink_nl_cmd_param_set_doit,
5116 .flags = GENL_ADMIN_PERM, 5141 .flags = GENL_ADMIN_PERM,
5117 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5142 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5118 }, 5143 },
5119 { 5144 {
5120 .cmd = DEVLINK_CMD_PORT_PARAM_GET, 5145 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
5146 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5121 .doit = devlink_nl_cmd_port_param_get_doit, 5147 .doit = devlink_nl_cmd_port_param_get_doit,
5122 .dumpit = devlink_nl_cmd_port_param_get_dumpit, 5148 .dumpit = devlink_nl_cmd_port_param_get_dumpit,
5123 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 5149 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
@@ -5125,12 +5151,14 @@ static const struct genl_ops devlink_nl_ops[] = {
5125 }, 5151 },
5126 { 5152 {
5127 .cmd = DEVLINK_CMD_PORT_PARAM_SET, 5153 .cmd = DEVLINK_CMD_PORT_PARAM_SET,
5154 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5128 .doit = devlink_nl_cmd_port_param_set_doit, 5155 .doit = devlink_nl_cmd_port_param_set_doit,
5129 .flags = GENL_ADMIN_PERM, 5156 .flags = GENL_ADMIN_PERM,
5130 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 5157 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
5131 }, 5158 },
5132 { 5159 {
5133 .cmd = DEVLINK_CMD_REGION_GET, 5160 .cmd = DEVLINK_CMD_REGION_GET,
5161 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5134 .doit = devlink_nl_cmd_region_get_doit, 5162 .doit = devlink_nl_cmd_region_get_doit,
5135 .dumpit = devlink_nl_cmd_region_get_dumpit, 5163 .dumpit = devlink_nl_cmd_region_get_dumpit,
5136 .flags = GENL_ADMIN_PERM, 5164 .flags = GENL_ADMIN_PERM,
@@ -5138,18 +5166,21 @@ static const struct genl_ops devlink_nl_ops[] = {
5138 }, 5166 },
5139 { 5167 {
5140 .cmd = DEVLINK_CMD_REGION_DEL, 5168 .cmd = DEVLINK_CMD_REGION_DEL,
5169 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5141 .doit = devlink_nl_cmd_region_del, 5170 .doit = devlink_nl_cmd_region_del,
5142 .flags = GENL_ADMIN_PERM, 5171 .flags = GENL_ADMIN_PERM,
5143 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5172 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5144 }, 5173 },
5145 { 5174 {
5146 .cmd = DEVLINK_CMD_REGION_READ, 5175 .cmd = DEVLINK_CMD_REGION_READ,
5176 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5147 .dumpit = devlink_nl_cmd_region_read_dumpit, 5177 .dumpit = devlink_nl_cmd_region_read_dumpit,
5148 .flags = GENL_ADMIN_PERM, 5178 .flags = GENL_ADMIN_PERM,
5149 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5179 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5150 }, 5180 },
5151 { 5181 {
5152 .cmd = DEVLINK_CMD_INFO_GET, 5182 .cmd = DEVLINK_CMD_INFO_GET,
5183 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5153 .doit = devlink_nl_cmd_info_get_doit, 5184 .doit = devlink_nl_cmd_info_get_doit,
5154 .dumpit = devlink_nl_cmd_info_get_dumpit, 5185 .dumpit = devlink_nl_cmd_info_get_dumpit,
5155 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5186 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
@@ -5157,6 +5188,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5157 }, 5188 },
5158 { 5189 {
5159 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 5190 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
5191 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5160 .doit = devlink_nl_cmd_health_reporter_get_doit, 5192 .doit = devlink_nl_cmd_health_reporter_get_doit,
5161 .dumpit = devlink_nl_cmd_health_reporter_get_dumpit, 5193 .dumpit = devlink_nl_cmd_health_reporter_get_dumpit,
5162 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5194 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
@@ -5164,24 +5196,28 @@ static const struct genl_ops devlink_nl_ops[] = {
5164 }, 5196 },
5165 { 5197 {
5166 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET, 5198 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
5199 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5167 .doit = devlink_nl_cmd_health_reporter_set_doit, 5200 .doit = devlink_nl_cmd_health_reporter_set_doit,
5168 .flags = GENL_ADMIN_PERM, 5201 .flags = GENL_ADMIN_PERM,
5169 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5202 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5170 }, 5203 },
5171 { 5204 {
5172 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER, 5205 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
5206 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5173 .doit = devlink_nl_cmd_health_reporter_recover_doit, 5207 .doit = devlink_nl_cmd_health_reporter_recover_doit,
5174 .flags = GENL_ADMIN_PERM, 5208 .flags = GENL_ADMIN_PERM,
5175 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5209 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5176 }, 5210 },
5177 { 5211 {
5178 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 5212 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
5213 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5179 .doit = devlink_nl_cmd_health_reporter_diagnose_doit, 5214 .doit = devlink_nl_cmd_health_reporter_diagnose_doit,
5180 .flags = GENL_ADMIN_PERM, 5215 .flags = GENL_ADMIN_PERM,
5181 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5216 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5182 }, 5217 },
5183 { 5218 {
5184 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET, 5219 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
5220 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5185 .doit = devlink_nl_cmd_health_reporter_dump_get_doit, 5221 .doit = devlink_nl_cmd_health_reporter_dump_get_doit,
5186 .flags = GENL_ADMIN_PERM, 5222 .flags = GENL_ADMIN_PERM,
5187 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5223 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5189,6 +5225,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5189 }, 5225 },
5190 { 5226 {
5191 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR, 5227 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
5228 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5192 .doit = devlink_nl_cmd_health_reporter_dump_clear_doit, 5229 .doit = devlink_nl_cmd_health_reporter_dump_clear_doit,
5193 .flags = GENL_ADMIN_PERM, 5230 .flags = GENL_ADMIN_PERM,
5194 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5231 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
@@ -5196,6 +5233,7 @@ static const struct genl_ops devlink_nl_ops[] = {
5196 }, 5233 },
5197 { 5234 {
5198 .cmd = DEVLINK_CMD_FLASH_UPDATE, 5235 .cmd = DEVLINK_CMD_FLASH_UPDATE,
5236 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
5199 .doit = devlink_nl_cmd_flash_update, 5237 .doit = devlink_nl_cmd_flash_update,
5200 .flags = GENL_ADMIN_PERM, 5238 .flags = GENL_ADMIN_PERM,
5201 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5239 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c
index c7785efeea57..d4ce0542acfa 100644
--- a/net/core/drop_monitor.c
+++ b/net/core/drop_monitor.c
@@ -355,14 +355,17 @@ out:
355static const struct genl_ops dropmon_ops[] = { 355static const struct genl_ops dropmon_ops[] = {
356 { 356 {
357 .cmd = NET_DM_CMD_CONFIG, 357 .cmd = NET_DM_CMD_CONFIG,
358 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
358 .doit = net_dm_cmd_config, 359 .doit = net_dm_cmd_config,
359 }, 360 },
360 { 361 {
361 .cmd = NET_DM_CMD_START, 362 .cmd = NET_DM_CMD_START,
363 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
362 .doit = net_dm_cmd_trace, 364 .doit = net_dm_cmd_trace,
363 }, 365 },
364 { 366 {
365 .cmd = NET_DM_CMD_STOP, 367 .cmd = NET_DM_CMD_STOP,
368 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
366 .doit = net_dm_cmd_trace, 369 .doit = net_dm_cmd_trace,
367 }, 370 },
368}; 371};
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index c2d5a368d6d8..8f8337f893ba 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
@@ -437,12 +437,14 @@ fail:
437static const struct genl_ops hsr_ops[] = { 437static const struct genl_ops hsr_ops[] = {
438 { 438 {
439 .cmd = HSR_C_GET_NODE_STATUS, 439 .cmd = HSR_C_GET_NODE_STATUS,
440 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
440 .flags = 0, 441 .flags = 0,
441 .doit = hsr_get_node_status, 442 .doit = hsr_get_node_status,
442 .dumpit = NULL, 443 .dumpit = NULL,
443 }, 444 },
444 { 445 {
445 .cmd = HSR_C_GET_NODE_LIST, 446 .cmd = HSR_C_GET_NODE_LIST,
447 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
446 .flags = 0, 448 .flags = 0,
447 .doit = hsr_get_node_list, 449 .doit = hsr_get_node_list,
448 .dumpit = NULL, 450 .dumpit = NULL,
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index 4218304cb201..e4c4174f9efb 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -2209,6 +2209,7 @@ static void nl802154_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
2209static const struct genl_ops nl802154_ops[] = { 2209static const struct genl_ops nl802154_ops[] = {
2210 { 2210 {
2211 .cmd = NL802154_CMD_GET_WPAN_PHY, 2211 .cmd = NL802154_CMD_GET_WPAN_PHY,
2212 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2212 .doit = nl802154_get_wpan_phy, 2213 .doit = nl802154_get_wpan_phy,
2213 .dumpit = nl802154_dump_wpan_phy, 2214 .dumpit = nl802154_dump_wpan_phy,
2214 .done = nl802154_dump_wpan_phy_done, 2215 .done = nl802154_dump_wpan_phy_done,
@@ -2218,6 +2219,7 @@ static const struct genl_ops nl802154_ops[] = {
2218 }, 2219 },
2219 { 2220 {
2220 .cmd = NL802154_CMD_GET_INTERFACE, 2221 .cmd = NL802154_CMD_GET_INTERFACE,
2222 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2221 .doit = nl802154_get_interface, 2223 .doit = nl802154_get_interface,
2222 .dumpit = nl802154_dump_interface, 2224 .dumpit = nl802154_dump_interface,
2223 /* can be retrieved by unprivileged users */ 2225 /* can be retrieved by unprivileged users */
@@ -2226,6 +2228,7 @@ static const struct genl_ops nl802154_ops[] = {
2226 }, 2228 },
2227 { 2229 {
2228 .cmd = NL802154_CMD_NEW_INTERFACE, 2230 .cmd = NL802154_CMD_NEW_INTERFACE,
2231 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2229 .doit = nl802154_new_interface, 2232 .doit = nl802154_new_interface,
2230 .flags = GENL_ADMIN_PERM, 2233 .flags = GENL_ADMIN_PERM,
2231 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2234 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2233,6 +2236,7 @@ static const struct genl_ops nl802154_ops[] = {
2233 }, 2236 },
2234 { 2237 {
2235 .cmd = NL802154_CMD_DEL_INTERFACE, 2238 .cmd = NL802154_CMD_DEL_INTERFACE,
2239 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2236 .doit = nl802154_del_interface, 2240 .doit = nl802154_del_interface,
2237 .flags = GENL_ADMIN_PERM, 2241 .flags = GENL_ADMIN_PERM,
2238 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | 2242 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV |
@@ -2240,6 +2244,7 @@ static const struct genl_ops nl802154_ops[] = {
2240 }, 2244 },
2241 { 2245 {
2242 .cmd = NL802154_CMD_SET_CHANNEL, 2246 .cmd = NL802154_CMD_SET_CHANNEL,
2247 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2243 .doit = nl802154_set_channel, 2248 .doit = nl802154_set_channel,
2244 .flags = GENL_ADMIN_PERM, 2249 .flags = GENL_ADMIN_PERM,
2245 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2250 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2247,6 +2252,7 @@ static const struct genl_ops nl802154_ops[] = {
2247 }, 2252 },
2248 { 2253 {
2249 .cmd = NL802154_CMD_SET_CCA_MODE, 2254 .cmd = NL802154_CMD_SET_CCA_MODE,
2255 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2250 .doit = nl802154_set_cca_mode, 2256 .doit = nl802154_set_cca_mode,
2251 .flags = GENL_ADMIN_PERM, 2257 .flags = GENL_ADMIN_PERM,
2252 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2258 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2254,6 +2260,7 @@ static const struct genl_ops nl802154_ops[] = {
2254 }, 2260 },
2255 { 2261 {
2256 .cmd = NL802154_CMD_SET_CCA_ED_LEVEL, 2262 .cmd = NL802154_CMD_SET_CCA_ED_LEVEL,
2263 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2257 .doit = nl802154_set_cca_ed_level, 2264 .doit = nl802154_set_cca_ed_level,
2258 .flags = GENL_ADMIN_PERM, 2265 .flags = GENL_ADMIN_PERM,
2259 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2266 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2261,6 +2268,7 @@ static const struct genl_ops nl802154_ops[] = {
2261 }, 2268 },
2262 { 2269 {
2263 .cmd = NL802154_CMD_SET_TX_POWER, 2270 .cmd = NL802154_CMD_SET_TX_POWER,
2271 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2264 .doit = nl802154_set_tx_power, 2272 .doit = nl802154_set_tx_power,
2265 .flags = GENL_ADMIN_PERM, 2273 .flags = GENL_ADMIN_PERM,
2266 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2274 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2268,6 +2276,7 @@ static const struct genl_ops nl802154_ops[] = {
2268 }, 2276 },
2269 { 2277 {
2270 .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS, 2278 .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS,
2279 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2271 .doit = nl802154_wpan_phy_netns, 2280 .doit = nl802154_wpan_phy_netns,
2272 .flags = GENL_ADMIN_PERM, 2281 .flags = GENL_ADMIN_PERM,
2273 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2282 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
@@ -2275,6 +2284,7 @@ static const struct genl_ops nl802154_ops[] = {
2275 }, 2284 },
2276 { 2285 {
2277 .cmd = NL802154_CMD_SET_PAN_ID, 2286 .cmd = NL802154_CMD_SET_PAN_ID,
2287 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2278 .doit = nl802154_set_pan_id, 2288 .doit = nl802154_set_pan_id,
2279 .flags = GENL_ADMIN_PERM, 2289 .flags = GENL_ADMIN_PERM,
2280 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2290 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2282,6 +2292,7 @@ static const struct genl_ops nl802154_ops[] = {
2282 }, 2292 },
2283 { 2293 {
2284 .cmd = NL802154_CMD_SET_SHORT_ADDR, 2294 .cmd = NL802154_CMD_SET_SHORT_ADDR,
2295 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2285 .doit = nl802154_set_short_addr, 2296 .doit = nl802154_set_short_addr,
2286 .flags = GENL_ADMIN_PERM, 2297 .flags = GENL_ADMIN_PERM,
2287 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2298 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2289,6 +2300,7 @@ static const struct genl_ops nl802154_ops[] = {
2289 }, 2300 },
2290 { 2301 {
2291 .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT, 2302 .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT,
2303 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2292 .doit = nl802154_set_backoff_exponent, 2304 .doit = nl802154_set_backoff_exponent,
2293 .flags = GENL_ADMIN_PERM, 2305 .flags = GENL_ADMIN_PERM,
2294 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2306 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2296,6 +2308,7 @@ static const struct genl_ops nl802154_ops[] = {
2296 }, 2308 },
2297 { 2309 {
2298 .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS, 2310 .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS,
2311 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2299 .doit = nl802154_set_max_csma_backoffs, 2312 .doit = nl802154_set_max_csma_backoffs,
2300 .flags = GENL_ADMIN_PERM, 2313 .flags = GENL_ADMIN_PERM,
2301 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2314 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2303,6 +2316,7 @@ static const struct genl_ops nl802154_ops[] = {
2303 }, 2316 },
2304 { 2317 {
2305 .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES, 2318 .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES,
2319 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2306 .doit = nl802154_set_max_frame_retries, 2320 .doit = nl802154_set_max_frame_retries,
2307 .flags = GENL_ADMIN_PERM, 2321 .flags = GENL_ADMIN_PERM,
2308 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2322 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2310,6 +2324,7 @@ static const struct genl_ops nl802154_ops[] = {
2310 }, 2324 },
2311 { 2325 {
2312 .cmd = NL802154_CMD_SET_LBT_MODE, 2326 .cmd = NL802154_CMD_SET_LBT_MODE,
2327 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2313 .doit = nl802154_set_lbt_mode, 2328 .doit = nl802154_set_lbt_mode,
2314 .flags = GENL_ADMIN_PERM, 2329 .flags = GENL_ADMIN_PERM,
2315 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2330 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2317,6 +2332,7 @@ static const struct genl_ops nl802154_ops[] = {
2317 }, 2332 },
2318 { 2333 {
2319 .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT, 2334 .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT,
2335 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2320 .doit = nl802154_set_ackreq_default, 2336 .doit = nl802154_set_ackreq_default,
2321 .flags = GENL_ADMIN_PERM, 2337 .flags = GENL_ADMIN_PERM,
2322 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2338 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2325,6 +2341,7 @@ static const struct genl_ops nl802154_ops[] = {
2325#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL 2341#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
2326 { 2342 {
2327 .cmd = NL802154_CMD_SET_SEC_PARAMS, 2343 .cmd = NL802154_CMD_SET_SEC_PARAMS,
2344 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2328 .doit = nl802154_set_llsec_params, 2345 .doit = nl802154_set_llsec_params,
2329 .flags = GENL_ADMIN_PERM, 2346 .flags = GENL_ADMIN_PERM,
2330 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2347 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2332,6 +2349,7 @@ static const struct genl_ops nl802154_ops[] = {
2332 }, 2349 },
2333 { 2350 {
2334 .cmd = NL802154_CMD_GET_SEC_KEY, 2351 .cmd = NL802154_CMD_GET_SEC_KEY,
2352 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2335 /* TODO .doit by matching key id? */ 2353 /* TODO .doit by matching key id? */
2336 .dumpit = nl802154_dump_llsec_key, 2354 .dumpit = nl802154_dump_llsec_key,
2337 .flags = GENL_ADMIN_PERM, 2355 .flags = GENL_ADMIN_PERM,
@@ -2340,6 +2358,7 @@ static const struct genl_ops nl802154_ops[] = {
2340 }, 2358 },
2341 { 2359 {
2342 .cmd = NL802154_CMD_NEW_SEC_KEY, 2360 .cmd = NL802154_CMD_NEW_SEC_KEY,
2361 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2343 .doit = nl802154_add_llsec_key, 2362 .doit = nl802154_add_llsec_key,
2344 .flags = GENL_ADMIN_PERM, 2363 .flags = GENL_ADMIN_PERM,
2345 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2364 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2347,6 +2366,7 @@ static const struct genl_ops nl802154_ops[] = {
2347 }, 2366 },
2348 { 2367 {
2349 .cmd = NL802154_CMD_DEL_SEC_KEY, 2368 .cmd = NL802154_CMD_DEL_SEC_KEY,
2369 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2350 .doit = nl802154_del_llsec_key, 2370 .doit = nl802154_del_llsec_key,
2351 .flags = GENL_ADMIN_PERM, 2371 .flags = GENL_ADMIN_PERM,
2352 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2372 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2355,6 +2375,7 @@ static const struct genl_ops nl802154_ops[] = {
2355 /* TODO unique identifier must short+pan OR extended_addr */ 2375 /* TODO unique identifier must short+pan OR extended_addr */
2356 { 2376 {
2357 .cmd = NL802154_CMD_GET_SEC_DEV, 2377 .cmd = NL802154_CMD_GET_SEC_DEV,
2378 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2358 /* TODO .doit by matching extended_addr? */ 2379 /* TODO .doit by matching extended_addr? */
2359 .dumpit = nl802154_dump_llsec_dev, 2380 .dumpit = nl802154_dump_llsec_dev,
2360 .flags = GENL_ADMIN_PERM, 2381 .flags = GENL_ADMIN_PERM,
@@ -2363,6 +2384,7 @@ static const struct genl_ops nl802154_ops[] = {
2363 }, 2384 },
2364 { 2385 {
2365 .cmd = NL802154_CMD_NEW_SEC_DEV, 2386 .cmd = NL802154_CMD_NEW_SEC_DEV,
2387 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2366 .doit = nl802154_add_llsec_dev, 2388 .doit = nl802154_add_llsec_dev,
2367 .flags = GENL_ADMIN_PERM, 2389 .flags = GENL_ADMIN_PERM,
2368 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2390 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2370,6 +2392,7 @@ static const struct genl_ops nl802154_ops[] = {
2370 }, 2392 },
2371 { 2393 {
2372 .cmd = NL802154_CMD_DEL_SEC_DEV, 2394 .cmd = NL802154_CMD_DEL_SEC_DEV,
2395 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2373 .doit = nl802154_del_llsec_dev, 2396 .doit = nl802154_del_llsec_dev,
2374 .flags = GENL_ADMIN_PERM, 2397 .flags = GENL_ADMIN_PERM,
2375 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2398 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2378,6 +2401,7 @@ static const struct genl_ops nl802154_ops[] = {
2378 /* TODO remove complete devkey, put it as nested? */ 2401 /* TODO remove complete devkey, put it as nested? */
2379 { 2402 {
2380 .cmd = NL802154_CMD_GET_SEC_DEVKEY, 2403 .cmd = NL802154_CMD_GET_SEC_DEVKEY,
2404 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2381 /* TODO doit by matching ??? */ 2405 /* TODO doit by matching ??? */
2382 .dumpit = nl802154_dump_llsec_devkey, 2406 .dumpit = nl802154_dump_llsec_devkey,
2383 .flags = GENL_ADMIN_PERM, 2407 .flags = GENL_ADMIN_PERM,
@@ -2386,6 +2410,7 @@ static const struct genl_ops nl802154_ops[] = {
2386 }, 2410 },
2387 { 2411 {
2388 .cmd = NL802154_CMD_NEW_SEC_DEVKEY, 2412 .cmd = NL802154_CMD_NEW_SEC_DEVKEY,
2413 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2389 .doit = nl802154_add_llsec_devkey, 2414 .doit = nl802154_add_llsec_devkey,
2390 .flags = GENL_ADMIN_PERM, 2415 .flags = GENL_ADMIN_PERM,
2391 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2416 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2393,6 +2418,7 @@ static const struct genl_ops nl802154_ops[] = {
2393 }, 2418 },
2394 { 2419 {
2395 .cmd = NL802154_CMD_DEL_SEC_DEVKEY, 2420 .cmd = NL802154_CMD_DEL_SEC_DEVKEY,
2421 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2396 .doit = nl802154_del_llsec_devkey, 2422 .doit = nl802154_del_llsec_devkey,
2397 .flags = GENL_ADMIN_PERM, 2423 .flags = GENL_ADMIN_PERM,
2398 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2424 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2400,6 +2426,7 @@ static const struct genl_ops nl802154_ops[] = {
2400 }, 2426 },
2401 { 2427 {
2402 .cmd = NL802154_CMD_GET_SEC_LEVEL, 2428 .cmd = NL802154_CMD_GET_SEC_LEVEL,
2429 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2403 /* TODO .doit by matching frame_type? */ 2430 /* TODO .doit by matching frame_type? */
2404 .dumpit = nl802154_dump_llsec_seclevel, 2431 .dumpit = nl802154_dump_llsec_seclevel,
2405 .flags = GENL_ADMIN_PERM, 2432 .flags = GENL_ADMIN_PERM,
@@ -2408,6 +2435,7 @@ static const struct genl_ops nl802154_ops[] = {
2408 }, 2435 },
2409 { 2436 {
2410 .cmd = NL802154_CMD_NEW_SEC_LEVEL, 2437 .cmd = NL802154_CMD_NEW_SEC_LEVEL,
2438 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2411 .doit = nl802154_add_llsec_seclevel, 2439 .doit = nl802154_add_llsec_seclevel,
2412 .flags = GENL_ADMIN_PERM, 2440 .flags = GENL_ADMIN_PERM,
2413 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2441 .internal_flags = NL802154_FLAG_NEED_NETDEV |
@@ -2415,6 +2443,7 @@ static const struct genl_ops nl802154_ops[] = {
2415 }, 2443 },
2416 { 2444 {
2417 .cmd = NL802154_CMD_DEL_SEC_LEVEL, 2445 .cmd = NL802154_CMD_DEL_SEC_LEVEL,
2446 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2418 /* TODO match frame_type only? */ 2447 /* TODO match frame_type only? */
2419 .doit = nl802154_del_llsec_seclevel, 2448 .doit = nl802154_del_llsec_seclevel,
2420 .flags = GENL_ADMIN_PERM, 2449 .flags = GENL_ADMIN_PERM,
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
index 1ca1586a7e46..ca95051317ed 100644
--- a/net/ipv4/fou.c
+++ b/net/ipv4/fou.c
@@ -913,16 +913,19 @@ static int fou_nl_dump(struct sk_buff *skb, struct netlink_callback *cb)
913static const struct genl_ops fou_nl_ops[] = { 913static const struct genl_ops fou_nl_ops[] = {
914 { 914 {
915 .cmd = FOU_CMD_ADD, 915 .cmd = FOU_CMD_ADD,
916 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
916 .doit = fou_nl_cmd_add_port, 917 .doit = fou_nl_cmd_add_port,
917 .flags = GENL_ADMIN_PERM, 918 .flags = GENL_ADMIN_PERM,
918 }, 919 },
919 { 920 {
920 .cmd = FOU_CMD_DEL, 921 .cmd = FOU_CMD_DEL,
922 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
921 .doit = fou_nl_cmd_rm_port, 923 .doit = fou_nl_cmd_rm_port,
922 .flags = GENL_ADMIN_PERM, 924 .flags = GENL_ADMIN_PERM,
923 }, 925 },
924 { 926 {
925 .cmd = FOU_CMD_GET, 927 .cmd = FOU_CMD_GET,
928 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
926 .doit = fou_nl_cmd_get_port, 929 .doit = fou_nl_cmd_get_port,
927 .dumpit = fou_nl_dump, 930 .dumpit = fou_nl_dump,
928 }, 931 },
diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index 9a08bfb0672c..f262f2cace29 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -951,11 +951,13 @@ static int tcp_metrics_nl_cmd_del(struct sk_buff *skb, struct genl_info *info)
951static const struct genl_ops tcp_metrics_nl_ops[] = { 951static const struct genl_ops tcp_metrics_nl_ops[] = {
952 { 952 {
953 .cmd = TCP_METRICS_CMD_GET, 953 .cmd = TCP_METRICS_CMD_GET,
954 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
954 .doit = tcp_metrics_nl_cmd_get, 955 .doit = tcp_metrics_nl_cmd_get,
955 .dumpit = tcp_metrics_nl_dump, 956 .dumpit = tcp_metrics_nl_dump,
956 }, 957 },
957 { 958 {
958 .cmd = TCP_METRICS_CMD_DEL, 959 .cmd = TCP_METRICS_CMD_DEL,
960 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
959 .doit = tcp_metrics_nl_cmd_del, 961 .doit = tcp_metrics_nl_cmd_del,
960 .flags = GENL_ADMIN_PERM, 962 .flags = GENL_ADMIN_PERM,
961 }, 963 },
diff --git a/net/ipv6/ila/ila_main.c b/net/ipv6/ila/ila_main.c
index 8d31a5066d0c..257d2b681246 100644
--- a/net/ipv6/ila/ila_main.c
+++ b/net/ipv6/ila/ila_main.c
@@ -16,21 +16,25 @@ static const struct nla_policy ila_nl_policy[ILA_ATTR_MAX + 1] = {
16static const struct genl_ops ila_nl_ops[] = { 16static const struct genl_ops ila_nl_ops[] = {
17 { 17 {
18 .cmd = ILA_CMD_ADD, 18 .cmd = ILA_CMD_ADD,
19 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
19 .doit = ila_xlat_nl_cmd_add_mapping, 20 .doit = ila_xlat_nl_cmd_add_mapping,
20 .flags = GENL_ADMIN_PERM, 21 .flags = GENL_ADMIN_PERM,
21 }, 22 },
22 { 23 {
23 .cmd = ILA_CMD_DEL, 24 .cmd = ILA_CMD_DEL,
25 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
24 .doit = ila_xlat_nl_cmd_del_mapping, 26 .doit = ila_xlat_nl_cmd_del_mapping,
25 .flags = GENL_ADMIN_PERM, 27 .flags = GENL_ADMIN_PERM,
26 }, 28 },
27 { 29 {
28 .cmd = ILA_CMD_FLUSH, 30 .cmd = ILA_CMD_FLUSH,
31 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
29 .doit = ila_xlat_nl_cmd_flush, 32 .doit = ila_xlat_nl_cmd_flush,
30 .flags = GENL_ADMIN_PERM, 33 .flags = GENL_ADMIN_PERM,
31 }, 34 },
32 { 35 {
33 .cmd = ILA_CMD_GET, 36 .cmd = ILA_CMD_GET,
37 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
34 .doit = ila_xlat_nl_cmd_get_mapping, 38 .doit = ila_xlat_nl_cmd_get_mapping,
35 .start = ila_xlat_nl_dump_start, 39 .start = ila_xlat_nl_dump_start,
36 .dumpit = ila_xlat_nl_dump, 40 .dumpit = ila_xlat_nl_dump,
diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index ceff773471e7..0c5479ef9b38 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -398,11 +398,13 @@ static struct pernet_operations ip6_segments_ops = {
398static const struct genl_ops seg6_genl_ops[] = { 398static const struct genl_ops seg6_genl_ops[] = {
399 { 399 {
400 .cmd = SEG6_CMD_SETHMAC, 400 .cmd = SEG6_CMD_SETHMAC,
401 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
401 .doit = seg6_genl_sethmac, 402 .doit = seg6_genl_sethmac,
402 .flags = GENL_ADMIN_PERM, 403 .flags = GENL_ADMIN_PERM,
403 }, 404 },
404 { 405 {
405 .cmd = SEG6_CMD_DUMPHMAC, 406 .cmd = SEG6_CMD_DUMPHMAC,
407 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
406 .start = seg6_genl_dumphmac_start, 408 .start = seg6_genl_dumphmac_start,
407 .dumpit = seg6_genl_dumphmac, 409 .dumpit = seg6_genl_dumphmac,
408 .done = seg6_genl_dumphmac_done, 410 .done = seg6_genl_dumphmac_done,
@@ -410,11 +412,13 @@ static const struct genl_ops seg6_genl_ops[] = {
410 }, 412 },
411 { 413 {
412 .cmd = SEG6_CMD_SET_TUNSRC, 414 .cmd = SEG6_CMD_SET_TUNSRC,
415 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
413 .doit = seg6_genl_set_tunsrc, 416 .doit = seg6_genl_set_tunsrc,
414 .flags = GENL_ADMIN_PERM, 417 .flags = GENL_ADMIN_PERM,
415 }, 418 },
416 { 419 {
417 .cmd = SEG6_CMD_GET_TUNSRC, 420 .cmd = SEG6_CMD_GET_TUNSRC,
421 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
418 .doit = seg6_genl_get_tunsrc, 422 .doit = seg6_genl_get_tunsrc,
419 .flags = GENL_ADMIN_PERM, 423 .flags = GENL_ADMIN_PERM,
420 }, 424 },
diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
index c31b50cc48d9..6acc7f869b0c 100644
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -915,47 +915,56 @@ static const struct nla_policy l2tp_nl_policy[L2TP_ATTR_MAX + 1] = {
915static const struct genl_ops l2tp_nl_ops[] = { 915static const struct genl_ops l2tp_nl_ops[] = {
916 { 916 {
917 .cmd = L2TP_CMD_NOOP, 917 .cmd = L2TP_CMD_NOOP,
918 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
918 .doit = l2tp_nl_cmd_noop, 919 .doit = l2tp_nl_cmd_noop,
919 /* can be retrieved by unprivileged users */ 920 /* can be retrieved by unprivileged users */
920 }, 921 },
921 { 922 {
922 .cmd = L2TP_CMD_TUNNEL_CREATE, 923 .cmd = L2TP_CMD_TUNNEL_CREATE,
924 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
923 .doit = l2tp_nl_cmd_tunnel_create, 925 .doit = l2tp_nl_cmd_tunnel_create,
924 .flags = GENL_ADMIN_PERM, 926 .flags = GENL_ADMIN_PERM,
925 }, 927 },
926 { 928 {
927 .cmd = L2TP_CMD_TUNNEL_DELETE, 929 .cmd = L2TP_CMD_TUNNEL_DELETE,
930 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
928 .doit = l2tp_nl_cmd_tunnel_delete, 931 .doit = l2tp_nl_cmd_tunnel_delete,
929 .flags = GENL_ADMIN_PERM, 932 .flags = GENL_ADMIN_PERM,
930 }, 933 },
931 { 934 {
932 .cmd = L2TP_CMD_TUNNEL_MODIFY, 935 .cmd = L2TP_CMD_TUNNEL_MODIFY,
936 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
933 .doit = l2tp_nl_cmd_tunnel_modify, 937 .doit = l2tp_nl_cmd_tunnel_modify,
934 .flags = GENL_ADMIN_PERM, 938 .flags = GENL_ADMIN_PERM,
935 }, 939 },
936 { 940 {
937 .cmd = L2TP_CMD_TUNNEL_GET, 941 .cmd = L2TP_CMD_TUNNEL_GET,
942 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
938 .doit = l2tp_nl_cmd_tunnel_get, 943 .doit = l2tp_nl_cmd_tunnel_get,
939 .dumpit = l2tp_nl_cmd_tunnel_dump, 944 .dumpit = l2tp_nl_cmd_tunnel_dump,
940 .flags = GENL_ADMIN_PERM, 945 .flags = GENL_ADMIN_PERM,
941 }, 946 },
942 { 947 {
943 .cmd = L2TP_CMD_SESSION_CREATE, 948 .cmd = L2TP_CMD_SESSION_CREATE,
949 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
944 .doit = l2tp_nl_cmd_session_create, 950 .doit = l2tp_nl_cmd_session_create,
945 .flags = GENL_ADMIN_PERM, 951 .flags = GENL_ADMIN_PERM,
946 }, 952 },
947 { 953 {
948 .cmd = L2TP_CMD_SESSION_DELETE, 954 .cmd = L2TP_CMD_SESSION_DELETE,
955 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
949 .doit = l2tp_nl_cmd_session_delete, 956 .doit = l2tp_nl_cmd_session_delete,
950 .flags = GENL_ADMIN_PERM, 957 .flags = GENL_ADMIN_PERM,
951 }, 958 },
952 { 959 {
953 .cmd = L2TP_CMD_SESSION_MODIFY, 960 .cmd = L2TP_CMD_SESSION_MODIFY,
961 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
954 .doit = l2tp_nl_cmd_session_modify, 962 .doit = l2tp_nl_cmd_session_modify,
955 .flags = GENL_ADMIN_PERM, 963 .flags = GENL_ADMIN_PERM,
956 }, 964 },
957 { 965 {
958 .cmd = L2TP_CMD_SESSION_GET, 966 .cmd = L2TP_CMD_SESSION_GET,
967 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
959 .doit = l2tp_nl_cmd_session_get, 968 .doit = l2tp_nl_cmd_session_get,
960 .dumpit = l2tp_nl_cmd_session_dump, 969 .dumpit = l2tp_nl_cmd_session_dump,
961 .flags = GENL_ADMIN_PERM, 970 .flags = GENL_ADMIN_PERM,
diff --git a/net/ncsi/ncsi-netlink.c b/net/ncsi/ncsi-netlink.c
index 37759c88ef02..7fc4feddafa3 100644
--- a/net/ncsi/ncsi-netlink.c
+++ b/net/ncsi/ncsi-netlink.c
@@ -723,32 +723,38 @@ static int ncsi_set_channel_mask_nl(struct sk_buff *msg,
723static const struct genl_ops ncsi_ops[] = { 723static const struct genl_ops ncsi_ops[] = {
724 { 724 {
725 .cmd = NCSI_CMD_PKG_INFO, 725 .cmd = NCSI_CMD_PKG_INFO,
726 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
726 .doit = ncsi_pkg_info_nl, 727 .doit = ncsi_pkg_info_nl,
727 .dumpit = ncsi_pkg_info_all_nl, 728 .dumpit = ncsi_pkg_info_all_nl,
728 .flags = 0, 729 .flags = 0,
729 }, 730 },
730 { 731 {
731 .cmd = NCSI_CMD_SET_INTERFACE, 732 .cmd = NCSI_CMD_SET_INTERFACE,
733 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
732 .doit = ncsi_set_interface_nl, 734 .doit = ncsi_set_interface_nl,
733 .flags = GENL_ADMIN_PERM, 735 .flags = GENL_ADMIN_PERM,
734 }, 736 },
735 { 737 {
736 .cmd = NCSI_CMD_CLEAR_INTERFACE, 738 .cmd = NCSI_CMD_CLEAR_INTERFACE,
739 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
737 .doit = ncsi_clear_interface_nl, 740 .doit = ncsi_clear_interface_nl,
738 .flags = GENL_ADMIN_PERM, 741 .flags = GENL_ADMIN_PERM,
739 }, 742 },
740 { 743 {
741 .cmd = NCSI_CMD_SEND_CMD, 744 .cmd = NCSI_CMD_SEND_CMD,
745 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
742 .doit = ncsi_send_cmd_nl, 746 .doit = ncsi_send_cmd_nl,
743 .flags = GENL_ADMIN_PERM, 747 .flags = GENL_ADMIN_PERM,
744 }, 748 },
745 { 749 {
746 .cmd = NCSI_CMD_SET_PACKAGE_MASK, 750 .cmd = NCSI_CMD_SET_PACKAGE_MASK,
751 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
747 .doit = ncsi_set_package_mask_nl, 752 .doit = ncsi_set_package_mask_nl,
748 .flags = GENL_ADMIN_PERM, 753 .flags = GENL_ADMIN_PERM,
749 }, 754 },
750 { 755 {
751 .cmd = NCSI_CMD_SET_CHANNEL_MASK, 756 .cmd = NCSI_CMD_SET_CHANNEL_MASK,
757 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
752 .doit = ncsi_set_channel_mask_nl, 758 .doit = ncsi_set_channel_mask_nl,
753 .flags = GENL_ADMIN_PERM, 759 .flags = GENL_ADMIN_PERM,
754 }, 760 },
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 24bb1a7b590c..0e887159425c 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -3802,82 +3802,98 @@ out:
3802static const struct genl_ops ip_vs_genl_ops[] = { 3802static const struct genl_ops ip_vs_genl_ops[] = {
3803 { 3803 {
3804 .cmd = IPVS_CMD_NEW_SERVICE, 3804 .cmd = IPVS_CMD_NEW_SERVICE,
3805 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3805 .flags = GENL_ADMIN_PERM, 3806 .flags = GENL_ADMIN_PERM,
3806 .doit = ip_vs_genl_set_cmd, 3807 .doit = ip_vs_genl_set_cmd,
3807 }, 3808 },
3808 { 3809 {
3809 .cmd = IPVS_CMD_SET_SERVICE, 3810 .cmd = IPVS_CMD_SET_SERVICE,
3811 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3810 .flags = GENL_ADMIN_PERM, 3812 .flags = GENL_ADMIN_PERM,
3811 .doit = ip_vs_genl_set_cmd, 3813 .doit = ip_vs_genl_set_cmd,
3812 }, 3814 },
3813 { 3815 {
3814 .cmd = IPVS_CMD_DEL_SERVICE, 3816 .cmd = IPVS_CMD_DEL_SERVICE,
3817 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3815 .flags = GENL_ADMIN_PERM, 3818 .flags = GENL_ADMIN_PERM,
3816 .doit = ip_vs_genl_set_cmd, 3819 .doit = ip_vs_genl_set_cmd,
3817 }, 3820 },
3818 { 3821 {
3819 .cmd = IPVS_CMD_GET_SERVICE, 3822 .cmd = IPVS_CMD_GET_SERVICE,
3823 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3820 .flags = GENL_ADMIN_PERM, 3824 .flags = GENL_ADMIN_PERM,
3821 .doit = ip_vs_genl_get_cmd, 3825 .doit = ip_vs_genl_get_cmd,
3822 .dumpit = ip_vs_genl_dump_services, 3826 .dumpit = ip_vs_genl_dump_services,
3823 }, 3827 },
3824 { 3828 {
3825 .cmd = IPVS_CMD_NEW_DEST, 3829 .cmd = IPVS_CMD_NEW_DEST,
3830 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3826 .flags = GENL_ADMIN_PERM, 3831 .flags = GENL_ADMIN_PERM,
3827 .doit = ip_vs_genl_set_cmd, 3832 .doit = ip_vs_genl_set_cmd,
3828 }, 3833 },
3829 { 3834 {
3830 .cmd = IPVS_CMD_SET_DEST, 3835 .cmd = IPVS_CMD_SET_DEST,
3836 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3831 .flags = GENL_ADMIN_PERM, 3837 .flags = GENL_ADMIN_PERM,
3832 .doit = ip_vs_genl_set_cmd, 3838 .doit = ip_vs_genl_set_cmd,
3833 }, 3839 },
3834 { 3840 {
3835 .cmd = IPVS_CMD_DEL_DEST, 3841 .cmd = IPVS_CMD_DEL_DEST,
3842 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3836 .flags = GENL_ADMIN_PERM, 3843 .flags = GENL_ADMIN_PERM,
3837 .doit = ip_vs_genl_set_cmd, 3844 .doit = ip_vs_genl_set_cmd,
3838 }, 3845 },
3839 { 3846 {
3840 .cmd = IPVS_CMD_GET_DEST, 3847 .cmd = IPVS_CMD_GET_DEST,
3848 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3841 .flags = GENL_ADMIN_PERM, 3849 .flags = GENL_ADMIN_PERM,
3842 .dumpit = ip_vs_genl_dump_dests, 3850 .dumpit = ip_vs_genl_dump_dests,
3843 }, 3851 },
3844 { 3852 {
3845 .cmd = IPVS_CMD_NEW_DAEMON, 3853 .cmd = IPVS_CMD_NEW_DAEMON,
3854 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3846 .flags = GENL_ADMIN_PERM, 3855 .flags = GENL_ADMIN_PERM,
3847 .doit = ip_vs_genl_set_daemon, 3856 .doit = ip_vs_genl_set_daemon,
3848 }, 3857 },
3849 { 3858 {
3850 .cmd = IPVS_CMD_DEL_DAEMON, 3859 .cmd = IPVS_CMD_DEL_DAEMON,
3860 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3851 .flags = GENL_ADMIN_PERM, 3861 .flags = GENL_ADMIN_PERM,
3852 .doit = ip_vs_genl_set_daemon, 3862 .doit = ip_vs_genl_set_daemon,
3853 }, 3863 },
3854 { 3864 {
3855 .cmd = IPVS_CMD_GET_DAEMON, 3865 .cmd = IPVS_CMD_GET_DAEMON,
3866 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3856 .flags = GENL_ADMIN_PERM, 3867 .flags = GENL_ADMIN_PERM,
3857 .dumpit = ip_vs_genl_dump_daemons, 3868 .dumpit = ip_vs_genl_dump_daemons,
3858 }, 3869 },
3859 { 3870 {
3860 .cmd = IPVS_CMD_SET_CONFIG, 3871 .cmd = IPVS_CMD_SET_CONFIG,
3872 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3861 .flags = GENL_ADMIN_PERM, 3873 .flags = GENL_ADMIN_PERM,
3862 .doit = ip_vs_genl_set_cmd, 3874 .doit = ip_vs_genl_set_cmd,
3863 }, 3875 },
3864 { 3876 {
3865 .cmd = IPVS_CMD_GET_CONFIG, 3877 .cmd = IPVS_CMD_GET_CONFIG,
3878 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3866 .flags = GENL_ADMIN_PERM, 3879 .flags = GENL_ADMIN_PERM,
3867 .doit = ip_vs_genl_get_cmd, 3880 .doit = ip_vs_genl_get_cmd,
3868 }, 3881 },
3869 { 3882 {
3870 .cmd = IPVS_CMD_GET_INFO, 3883 .cmd = IPVS_CMD_GET_INFO,
3884 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3871 .flags = GENL_ADMIN_PERM, 3885 .flags = GENL_ADMIN_PERM,
3872 .doit = ip_vs_genl_get_cmd, 3886 .doit = ip_vs_genl_get_cmd,
3873 }, 3887 },
3874 { 3888 {
3875 .cmd = IPVS_CMD_ZERO, 3889 .cmd = IPVS_CMD_ZERO,
3890 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3876 .flags = GENL_ADMIN_PERM, 3891 .flags = GENL_ADMIN_PERM,
3877 .doit = ip_vs_genl_set_cmd, 3892 .doit = ip_vs_genl_set_cmd,
3878 }, 3893 },
3879 { 3894 {
3880 .cmd = IPVS_CMD_FLUSH, 3895 .cmd = IPVS_CMD_FLUSH,
3896 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
3881 .flags = GENL_ADMIN_PERM, 3897 .flags = GENL_ADMIN_PERM,
3882 .doit = ip_vs_genl_set_cmd, 3898 .doit = ip_vs_genl_set_cmd,
3883 }, 3899 },
diff --git a/net/netlabel/netlabel_calipso.c b/net/netlabel/netlabel_calipso.c
index 80184513b2b2..1de87172885d 100644
--- a/net/netlabel/netlabel_calipso.c
+++ b/net/netlabel/netlabel_calipso.c
@@ -321,24 +321,28 @@ static int netlbl_calipso_remove(struct sk_buff *skb, struct genl_info *info)
321static const struct genl_ops netlbl_calipso_ops[] = { 321static const struct genl_ops netlbl_calipso_ops[] = {
322 { 322 {
323 .cmd = NLBL_CALIPSO_C_ADD, 323 .cmd = NLBL_CALIPSO_C_ADD,
324 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
324 .flags = GENL_ADMIN_PERM, 325 .flags = GENL_ADMIN_PERM,
325 .doit = netlbl_calipso_add, 326 .doit = netlbl_calipso_add,
326 .dumpit = NULL, 327 .dumpit = NULL,
327 }, 328 },
328 { 329 {
329 .cmd = NLBL_CALIPSO_C_REMOVE, 330 .cmd = NLBL_CALIPSO_C_REMOVE,
331 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
330 .flags = GENL_ADMIN_PERM, 332 .flags = GENL_ADMIN_PERM,
331 .doit = netlbl_calipso_remove, 333 .doit = netlbl_calipso_remove,
332 .dumpit = NULL, 334 .dumpit = NULL,
333 }, 335 },
334 { 336 {
335 .cmd = NLBL_CALIPSO_C_LIST, 337 .cmd = NLBL_CALIPSO_C_LIST,
338 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
336 .flags = 0, 339 .flags = 0,
337 .doit = netlbl_calipso_list, 340 .doit = netlbl_calipso_list,
338 .dumpit = NULL, 341 .dumpit = NULL,
339 }, 342 },
340 { 343 {
341 .cmd = NLBL_CALIPSO_C_LISTALL, 344 .cmd = NLBL_CALIPSO_C_LISTALL,
345 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
342 .flags = 0, 346 .flags = 0,
343 .doit = NULL, 347 .doit = NULL,
344 .dumpit = netlbl_calipso_listall, 348 .dumpit = netlbl_calipso_listall,
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c
index 8d401df65928..5d1121981d0b 100644
--- a/net/netlabel/netlabel_cipso_v4.c
+++ b/net/netlabel/netlabel_cipso_v4.c
@@ -741,24 +741,28 @@ static int netlbl_cipsov4_remove(struct sk_buff *skb, struct genl_info *info)
741static const struct genl_ops netlbl_cipsov4_ops[] = { 741static const struct genl_ops netlbl_cipsov4_ops[] = {
742 { 742 {
743 .cmd = NLBL_CIPSOV4_C_ADD, 743 .cmd = NLBL_CIPSOV4_C_ADD,
744 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
744 .flags = GENL_ADMIN_PERM, 745 .flags = GENL_ADMIN_PERM,
745 .doit = netlbl_cipsov4_add, 746 .doit = netlbl_cipsov4_add,
746 .dumpit = NULL, 747 .dumpit = NULL,
747 }, 748 },
748 { 749 {
749 .cmd = NLBL_CIPSOV4_C_REMOVE, 750 .cmd = NLBL_CIPSOV4_C_REMOVE,
751 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
750 .flags = GENL_ADMIN_PERM, 752 .flags = GENL_ADMIN_PERM,
751 .doit = netlbl_cipsov4_remove, 753 .doit = netlbl_cipsov4_remove,
752 .dumpit = NULL, 754 .dumpit = NULL,
753 }, 755 },
754 { 756 {
755 .cmd = NLBL_CIPSOV4_C_LIST, 757 .cmd = NLBL_CIPSOV4_C_LIST,
758 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
756 .flags = 0, 759 .flags = 0,
757 .doit = netlbl_cipsov4_list, 760 .doit = netlbl_cipsov4_list,
758 .dumpit = NULL, 761 .dumpit = NULL,
759 }, 762 },
760 { 763 {
761 .cmd = NLBL_CIPSOV4_C_LISTALL, 764 .cmd = NLBL_CIPSOV4_C_LISTALL,
765 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
762 .flags = 0, 766 .flags = 0,
763 .doit = NULL, 767 .doit = NULL,
764 .dumpit = netlbl_cipsov4_listall, 768 .dumpit = netlbl_cipsov4_listall,
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index c6c8a101f2ff..cae04f207782 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -774,48 +774,56 @@ version_failure:
774static const struct genl_ops netlbl_mgmt_genl_ops[] = { 774static const struct genl_ops netlbl_mgmt_genl_ops[] = {
775 { 775 {
776 .cmd = NLBL_MGMT_C_ADD, 776 .cmd = NLBL_MGMT_C_ADD,
777 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
777 .flags = GENL_ADMIN_PERM, 778 .flags = GENL_ADMIN_PERM,
778 .doit = netlbl_mgmt_add, 779 .doit = netlbl_mgmt_add,
779 .dumpit = NULL, 780 .dumpit = NULL,
780 }, 781 },
781 { 782 {
782 .cmd = NLBL_MGMT_C_REMOVE, 783 .cmd = NLBL_MGMT_C_REMOVE,
784 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
783 .flags = GENL_ADMIN_PERM, 785 .flags = GENL_ADMIN_PERM,
784 .doit = netlbl_mgmt_remove, 786 .doit = netlbl_mgmt_remove,
785 .dumpit = NULL, 787 .dumpit = NULL,
786 }, 788 },
787 { 789 {
788 .cmd = NLBL_MGMT_C_LISTALL, 790 .cmd = NLBL_MGMT_C_LISTALL,
791 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
789 .flags = 0, 792 .flags = 0,
790 .doit = NULL, 793 .doit = NULL,
791 .dumpit = netlbl_mgmt_listall, 794 .dumpit = netlbl_mgmt_listall,
792 }, 795 },
793 { 796 {
794 .cmd = NLBL_MGMT_C_ADDDEF, 797 .cmd = NLBL_MGMT_C_ADDDEF,
798 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
795 .flags = GENL_ADMIN_PERM, 799 .flags = GENL_ADMIN_PERM,
796 .doit = netlbl_mgmt_adddef, 800 .doit = netlbl_mgmt_adddef,
797 .dumpit = NULL, 801 .dumpit = NULL,
798 }, 802 },
799 { 803 {
800 .cmd = NLBL_MGMT_C_REMOVEDEF, 804 .cmd = NLBL_MGMT_C_REMOVEDEF,
805 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
801 .flags = GENL_ADMIN_PERM, 806 .flags = GENL_ADMIN_PERM,
802 .doit = netlbl_mgmt_removedef, 807 .doit = netlbl_mgmt_removedef,
803 .dumpit = NULL, 808 .dumpit = NULL,
804 }, 809 },
805 { 810 {
806 .cmd = NLBL_MGMT_C_LISTDEF, 811 .cmd = NLBL_MGMT_C_LISTDEF,
812 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
807 .flags = 0, 813 .flags = 0,
808 .doit = netlbl_mgmt_listdef, 814 .doit = netlbl_mgmt_listdef,
809 .dumpit = NULL, 815 .dumpit = NULL,
810 }, 816 },
811 { 817 {
812 .cmd = NLBL_MGMT_C_PROTOCOLS, 818 .cmd = NLBL_MGMT_C_PROTOCOLS,
819 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
813 .flags = 0, 820 .flags = 0,
814 .doit = NULL, 821 .doit = NULL,
815 .dumpit = netlbl_mgmt_protocols, 822 .dumpit = netlbl_mgmt_protocols,
816 }, 823 },
817 { 824 {
818 .cmd = NLBL_MGMT_C_VERSION, 825 .cmd = NLBL_MGMT_C_VERSION,
826 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
819 .flags = 0, 827 .flags = 0,
820 .doit = netlbl_mgmt_version, 828 .doit = netlbl_mgmt_version,
821 .dumpit = NULL, 829 .dumpit = NULL,
diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
index 6b1b6c2b5141..b87dd34e1835 100644
--- a/net/netlabel/netlabel_unlabeled.c
+++ b/net/netlabel/netlabel_unlabeled.c
@@ -1317,48 +1317,56 @@ unlabel_staticlistdef_return:
1317static const struct genl_ops netlbl_unlabel_genl_ops[] = { 1317static const struct genl_ops netlbl_unlabel_genl_ops[] = {
1318 { 1318 {
1319 .cmd = NLBL_UNLABEL_C_STATICADD, 1319 .cmd = NLBL_UNLABEL_C_STATICADD,
1320 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1320 .flags = GENL_ADMIN_PERM, 1321 .flags = GENL_ADMIN_PERM,
1321 .doit = netlbl_unlabel_staticadd, 1322 .doit = netlbl_unlabel_staticadd,
1322 .dumpit = NULL, 1323 .dumpit = NULL,
1323 }, 1324 },
1324 { 1325 {
1325 .cmd = NLBL_UNLABEL_C_STATICREMOVE, 1326 .cmd = NLBL_UNLABEL_C_STATICREMOVE,
1327 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1326 .flags = GENL_ADMIN_PERM, 1328 .flags = GENL_ADMIN_PERM,
1327 .doit = netlbl_unlabel_staticremove, 1329 .doit = netlbl_unlabel_staticremove,
1328 .dumpit = NULL, 1330 .dumpit = NULL,
1329 }, 1331 },
1330 { 1332 {
1331 .cmd = NLBL_UNLABEL_C_STATICLIST, 1333 .cmd = NLBL_UNLABEL_C_STATICLIST,
1334 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1332 .flags = 0, 1335 .flags = 0,
1333 .doit = NULL, 1336 .doit = NULL,
1334 .dumpit = netlbl_unlabel_staticlist, 1337 .dumpit = netlbl_unlabel_staticlist,
1335 }, 1338 },
1336 { 1339 {
1337 .cmd = NLBL_UNLABEL_C_STATICADDDEF, 1340 .cmd = NLBL_UNLABEL_C_STATICADDDEF,
1341 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1338 .flags = GENL_ADMIN_PERM, 1342 .flags = GENL_ADMIN_PERM,
1339 .doit = netlbl_unlabel_staticadddef, 1343 .doit = netlbl_unlabel_staticadddef,
1340 .dumpit = NULL, 1344 .dumpit = NULL,
1341 }, 1345 },
1342 { 1346 {
1343 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF, 1347 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF,
1348 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1344 .flags = GENL_ADMIN_PERM, 1349 .flags = GENL_ADMIN_PERM,
1345 .doit = netlbl_unlabel_staticremovedef, 1350 .doit = netlbl_unlabel_staticremovedef,
1346 .dumpit = NULL, 1351 .dumpit = NULL,
1347 }, 1352 },
1348 { 1353 {
1349 .cmd = NLBL_UNLABEL_C_STATICLISTDEF, 1354 .cmd = NLBL_UNLABEL_C_STATICLISTDEF,
1355 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1350 .flags = 0, 1356 .flags = 0,
1351 .doit = NULL, 1357 .doit = NULL,
1352 .dumpit = netlbl_unlabel_staticlistdef, 1358 .dumpit = netlbl_unlabel_staticlistdef,
1353 }, 1359 },
1354 { 1360 {
1355 .cmd = NLBL_UNLABEL_C_ACCEPT, 1361 .cmd = NLBL_UNLABEL_C_ACCEPT,
1362 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1356 .flags = GENL_ADMIN_PERM, 1363 .flags = GENL_ADMIN_PERM,
1357 .doit = netlbl_unlabel_accept, 1364 .doit = netlbl_unlabel_accept,
1358 .dumpit = NULL, 1365 .dumpit = NULL,
1359 }, 1366 },
1360 { 1367 {
1361 .cmd = NLBL_UNLABEL_C_LIST, 1368 .cmd = NLBL_UNLABEL_C_LIST,
1369 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1362 .flags = 0, 1370 .flags = 0,
1363 .doit = netlbl_unlabel_list, 1371 .doit = netlbl_unlabel_list,
1364 .dumpit = NULL, 1372 .dumpit = NULL,
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 994d9aff2093..72668759cd2b 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -536,6 +536,24 @@ static int genl_family_rcv_msg(const struct genl_family *family,
536 if (ops->dumpit == NULL) 536 if (ops->dumpit == NULL)
537 return -EOPNOTSUPP; 537 return -EOPNOTSUPP;
538 538
539 if (!(ops->validate & GENL_DONT_VALIDATE_DUMP)) {
540 unsigned int validate = NL_VALIDATE_STRICT;
541 int hdrlen = GENL_HDRLEN + family->hdrsize;
542
543 if (ops->validate & GENL_DONT_VALIDATE_DUMP_STRICT)
544 validate = NL_VALIDATE_LIBERAL;
545
546 if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
547 return -EINVAL;
548
549 rc = __nla_validate(nlmsg_attrdata(nlh, hdrlen),
550 nlmsg_attrlen(nlh, hdrlen),
551 family->maxattr, family->policy,
552 validate, extack);
553 if (rc)
554 return rc;
555 }
556
539 if (!family->parallel_ops) { 557 if (!family->parallel_ops) {
540 struct netlink_dump_control c = { 558 struct netlink_dump_control c = {
541 .module = family->module, 559 .module = family->module,
@@ -577,9 +595,13 @@ static int genl_family_rcv_msg(const struct genl_family *family,
577 attrbuf = family->attrbuf; 595 attrbuf = family->attrbuf;
578 596
579 if (attrbuf) { 597 if (attrbuf) {
580 err = nlmsg_parse_deprecated(nlh, hdrlen, attrbuf, 598 enum netlink_validation validate = NL_VALIDATE_STRICT;
581 family->maxattr, family->policy, 599
582 extack); 600 if (ops->validate & GENL_DONT_VALIDATE_STRICT)
601 validate = NL_VALIDATE_LIBERAL;
602
603 err = __nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr,
604 family->policy, validate, extack);
583 if (err < 0) 605 if (err < 0)
584 goto out; 606 goto out;
585 } 607 }
@@ -939,6 +961,7 @@ static int genl_ctrl_event(int event, const struct genl_family *family,
939static const struct genl_ops genl_ctrl_ops[] = { 961static const struct genl_ops genl_ctrl_ops[] = {
940 { 962 {
941 .cmd = CTRL_CMD_GETFAMILY, 963 .cmd = CTRL_CMD_GETFAMILY,
964 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
942 .doit = ctrl_getfamily, 965 .doit = ctrl_getfamily,
943 .dumpit = ctrl_dumpfamily, 966 .dumpit = ctrl_dumpfamily,
944 }, 967 },
diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
index c6ba308cede7..04a8e47674ec 100644
--- a/net/nfc/netlink.c
+++ b/net/nfc/netlink.c
@@ -1669,82 +1669,101 @@ EXPORT_SYMBOL(nfc_vendor_cmd_reply);
1669static const struct genl_ops nfc_genl_ops[] = { 1669static const struct genl_ops nfc_genl_ops[] = {
1670 { 1670 {
1671 .cmd = NFC_CMD_GET_DEVICE, 1671 .cmd = NFC_CMD_GET_DEVICE,
1672 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1672 .doit = nfc_genl_get_device, 1673 .doit = nfc_genl_get_device,
1673 .dumpit = nfc_genl_dump_devices, 1674 .dumpit = nfc_genl_dump_devices,
1674 .done = nfc_genl_dump_devices_done, 1675 .done = nfc_genl_dump_devices_done,
1675 }, 1676 },
1676 { 1677 {
1677 .cmd = NFC_CMD_DEV_UP, 1678 .cmd = NFC_CMD_DEV_UP,
1679 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1678 .doit = nfc_genl_dev_up, 1680 .doit = nfc_genl_dev_up,
1679 }, 1681 },
1680 { 1682 {
1681 .cmd = NFC_CMD_DEV_DOWN, 1683 .cmd = NFC_CMD_DEV_DOWN,
1684 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1682 .doit = nfc_genl_dev_down, 1685 .doit = nfc_genl_dev_down,
1683 }, 1686 },
1684 { 1687 {
1685 .cmd = NFC_CMD_START_POLL, 1688 .cmd = NFC_CMD_START_POLL,
1689 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1686 .doit = nfc_genl_start_poll, 1690 .doit = nfc_genl_start_poll,
1687 }, 1691 },
1688 { 1692 {
1689 .cmd = NFC_CMD_STOP_POLL, 1693 .cmd = NFC_CMD_STOP_POLL,
1694 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1690 .doit = nfc_genl_stop_poll, 1695 .doit = nfc_genl_stop_poll,
1691 }, 1696 },
1692 { 1697 {
1693 .cmd = NFC_CMD_DEP_LINK_UP, 1698 .cmd = NFC_CMD_DEP_LINK_UP,
1699 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1694 .doit = nfc_genl_dep_link_up, 1700 .doit = nfc_genl_dep_link_up,
1695 }, 1701 },
1696 { 1702 {
1697 .cmd = NFC_CMD_DEP_LINK_DOWN, 1703 .cmd = NFC_CMD_DEP_LINK_DOWN,
1704 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1698 .doit = nfc_genl_dep_link_down, 1705 .doit = nfc_genl_dep_link_down,
1699 }, 1706 },
1700 { 1707 {
1701 .cmd = NFC_CMD_GET_TARGET, 1708 .cmd = NFC_CMD_GET_TARGET,
1709 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1702 .dumpit = nfc_genl_dump_targets, 1710 .dumpit = nfc_genl_dump_targets,
1703 .done = nfc_genl_dump_targets_done, 1711 .done = nfc_genl_dump_targets_done,
1704 }, 1712 },
1705 { 1713 {
1706 .cmd = NFC_CMD_LLC_GET_PARAMS, 1714 .cmd = NFC_CMD_LLC_GET_PARAMS,
1715 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1707 .doit = nfc_genl_llc_get_params, 1716 .doit = nfc_genl_llc_get_params,
1708 }, 1717 },
1709 { 1718 {
1710 .cmd = NFC_CMD_LLC_SET_PARAMS, 1719 .cmd = NFC_CMD_LLC_SET_PARAMS,
1720 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1711 .doit = nfc_genl_llc_set_params, 1721 .doit = nfc_genl_llc_set_params,
1712 }, 1722 },
1713 { 1723 {
1714 .cmd = NFC_CMD_LLC_SDREQ, 1724 .cmd = NFC_CMD_LLC_SDREQ,
1725 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1715 .doit = nfc_genl_llc_sdreq, 1726 .doit = nfc_genl_llc_sdreq,
1716 }, 1727 },
1717 { 1728 {
1718 .cmd = NFC_CMD_FW_DOWNLOAD, 1729 .cmd = NFC_CMD_FW_DOWNLOAD,
1730 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1719 .doit = nfc_genl_fw_download, 1731 .doit = nfc_genl_fw_download,
1720 }, 1732 },
1721 { 1733 {
1722 .cmd = NFC_CMD_ENABLE_SE, 1734 .cmd = NFC_CMD_ENABLE_SE,
1735 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1723 .doit = nfc_genl_enable_se, 1736 .doit = nfc_genl_enable_se,
1724 }, 1737 },
1725 { 1738 {
1726 .cmd = NFC_CMD_DISABLE_SE, 1739 .cmd = NFC_CMD_DISABLE_SE,
1740 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1727 .doit = nfc_genl_disable_se, 1741 .doit = nfc_genl_disable_se,
1728 }, 1742 },
1729 { 1743 {
1730 .cmd = NFC_CMD_GET_SE, 1744 .cmd = NFC_CMD_GET_SE,
1745 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1731 .dumpit = nfc_genl_dump_ses, 1746 .dumpit = nfc_genl_dump_ses,
1732 .done = nfc_genl_dump_ses_done, 1747 .done = nfc_genl_dump_ses_done,
1733 }, 1748 },
1734 { 1749 {
1735 .cmd = NFC_CMD_SE_IO, 1750 .cmd = NFC_CMD_SE_IO,
1751 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1736 .doit = nfc_genl_se_io, 1752 .doit = nfc_genl_se_io,
1737 }, 1753 },
1738 { 1754 {
1739 .cmd = NFC_CMD_ACTIVATE_TARGET, 1755 .cmd = NFC_CMD_ACTIVATE_TARGET,
1756 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1740 .doit = nfc_genl_activate_target, 1757 .doit = nfc_genl_activate_target,
1741 }, 1758 },
1742 { 1759 {
1743 .cmd = NFC_CMD_VENDOR, 1760 .cmd = NFC_CMD_VENDOR,
1761 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1744 .doit = nfc_genl_vendor_cmd, 1762 .doit = nfc_genl_vendor_cmd,
1745 }, 1763 },
1746 { 1764 {
1747 .cmd = NFC_CMD_DEACTIVATE_TARGET, 1765 .cmd = NFC_CMD_DEACTIVATE_TARGET,
1766 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1748 .doit = nfc_genl_deactivate_target, 1767 .doit = nfc_genl_deactivate_target,
1749 }, 1768 },
1750}; 1769};
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index ff8baf810bb3..bded32144619 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -2186,16 +2186,19 @@ exit_err:
2186 2186
2187static struct genl_ops ct_limit_genl_ops[] = { 2187static struct genl_ops ct_limit_genl_ops[] = {
2188 { .cmd = OVS_CT_LIMIT_CMD_SET, 2188 { .cmd = OVS_CT_LIMIT_CMD_SET,
2189 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2189 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 2190 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
2190 * privilege. */ 2191 * privilege. */
2191 .doit = ovs_ct_limit_cmd_set, 2192 .doit = ovs_ct_limit_cmd_set,
2192 }, 2193 },
2193 { .cmd = OVS_CT_LIMIT_CMD_DEL, 2194 { .cmd = OVS_CT_LIMIT_CMD_DEL,
2195 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2194 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 2196 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
2195 * privilege. */ 2197 * privilege. */
2196 .doit = ovs_ct_limit_cmd_del, 2198 .doit = ovs_ct_limit_cmd_del,
2197 }, 2199 },
2198 { .cmd = OVS_CT_LIMIT_CMD_GET, 2200 { .cmd = OVS_CT_LIMIT_CMD_GET,
2201 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2199 .flags = 0, /* OK for unprivileged users. */ 2202 .flags = 0, /* OK for unprivileged users. */
2200 .doit = ovs_ct_limit_cmd_get, 2203 .doit = ovs_ct_limit_cmd_get,
2201 }, 2204 },
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 3b99fc3de9ac..b95015c7e999 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -639,6 +639,7 @@ static const struct nla_policy packet_policy[OVS_PACKET_ATTR_MAX + 1] = {
639 639
640static const struct genl_ops dp_packet_genl_ops[] = { 640static const struct genl_ops dp_packet_genl_ops[] = {
641 { .cmd = OVS_PACKET_CMD_EXECUTE, 641 { .cmd = OVS_PACKET_CMD_EXECUTE,
642 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
642 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 643 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
643 .doit = ovs_packet_cmd_execute 644 .doit = ovs_packet_cmd_execute
644 } 645 }
@@ -1424,19 +1425,23 @@ static const struct nla_policy flow_policy[OVS_FLOW_ATTR_MAX + 1] = {
1424 1425
1425static const struct genl_ops dp_flow_genl_ops[] = { 1426static const struct genl_ops dp_flow_genl_ops[] = {
1426 { .cmd = OVS_FLOW_CMD_NEW, 1427 { .cmd = OVS_FLOW_CMD_NEW,
1428 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1427 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1429 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1428 .doit = ovs_flow_cmd_new 1430 .doit = ovs_flow_cmd_new
1429 }, 1431 },
1430 { .cmd = OVS_FLOW_CMD_DEL, 1432 { .cmd = OVS_FLOW_CMD_DEL,
1433 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1431 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1434 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1432 .doit = ovs_flow_cmd_del 1435 .doit = ovs_flow_cmd_del
1433 }, 1436 },
1434 { .cmd = OVS_FLOW_CMD_GET, 1437 { .cmd = OVS_FLOW_CMD_GET,
1438 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1435 .flags = 0, /* OK for unprivileged users. */ 1439 .flags = 0, /* OK for unprivileged users. */
1436 .doit = ovs_flow_cmd_get, 1440 .doit = ovs_flow_cmd_get,
1437 .dumpit = ovs_flow_cmd_dump 1441 .dumpit = ovs_flow_cmd_dump
1438 }, 1442 },
1439 { .cmd = OVS_FLOW_CMD_SET, 1443 { .cmd = OVS_FLOW_CMD_SET,
1444 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1440 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1445 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1441 .doit = ovs_flow_cmd_set, 1446 .doit = ovs_flow_cmd_set,
1442 }, 1447 },
@@ -1814,19 +1819,23 @@ static const struct nla_policy datapath_policy[OVS_DP_ATTR_MAX + 1] = {
1814 1819
1815static const struct genl_ops dp_datapath_genl_ops[] = { 1820static const struct genl_ops dp_datapath_genl_ops[] = {
1816 { .cmd = OVS_DP_CMD_NEW, 1821 { .cmd = OVS_DP_CMD_NEW,
1822 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1817 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1823 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1818 .doit = ovs_dp_cmd_new 1824 .doit = ovs_dp_cmd_new
1819 }, 1825 },
1820 { .cmd = OVS_DP_CMD_DEL, 1826 { .cmd = OVS_DP_CMD_DEL,
1827 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1821 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1828 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1822 .doit = ovs_dp_cmd_del 1829 .doit = ovs_dp_cmd_del
1823 }, 1830 },
1824 { .cmd = OVS_DP_CMD_GET, 1831 { .cmd = OVS_DP_CMD_GET,
1832 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1825 .flags = 0, /* OK for unprivileged users. */ 1833 .flags = 0, /* OK for unprivileged users. */
1826 .doit = ovs_dp_cmd_get, 1834 .doit = ovs_dp_cmd_get,
1827 .dumpit = ovs_dp_cmd_dump 1835 .dumpit = ovs_dp_cmd_dump
1828 }, 1836 },
1829 { .cmd = OVS_DP_CMD_SET, 1837 { .cmd = OVS_DP_CMD_SET,
1838 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1830 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1839 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1831 .doit = ovs_dp_cmd_set, 1840 .doit = ovs_dp_cmd_set,
1832 }, 1841 },
@@ -2254,19 +2263,23 @@ static const struct nla_policy vport_policy[OVS_VPORT_ATTR_MAX + 1] = {
2254 2263
2255static const struct genl_ops dp_vport_genl_ops[] = { 2264static const struct genl_ops dp_vport_genl_ops[] = {
2256 { .cmd = OVS_VPORT_CMD_NEW, 2265 { .cmd = OVS_VPORT_CMD_NEW,
2266 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2257 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2267 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2258 .doit = ovs_vport_cmd_new 2268 .doit = ovs_vport_cmd_new
2259 }, 2269 },
2260 { .cmd = OVS_VPORT_CMD_DEL, 2270 { .cmd = OVS_VPORT_CMD_DEL,
2271 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2261 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2272 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2262 .doit = ovs_vport_cmd_del 2273 .doit = ovs_vport_cmd_del
2263 }, 2274 },
2264 { .cmd = OVS_VPORT_CMD_GET, 2275 { .cmd = OVS_VPORT_CMD_GET,
2276 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2265 .flags = 0, /* OK for unprivileged users. */ 2277 .flags = 0, /* OK for unprivileged users. */
2266 .doit = ovs_vport_cmd_get, 2278 .doit = ovs_vport_cmd_get,
2267 .dumpit = ovs_vport_cmd_dump 2279 .dumpit = ovs_vport_cmd_dump
2268 }, 2280 },
2269 { .cmd = OVS_VPORT_CMD_SET, 2281 { .cmd = OVS_VPORT_CMD_SET,
2282 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
2270 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2283 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2271 .doit = ovs_vport_cmd_set, 2284 .doit = ovs_vport_cmd_set,
2272 }, 2285 },
diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c
index 9c89e8539a5a..bb67238f0340 100644
--- a/net/openvswitch/meter.c
+++ b/net/openvswitch/meter.c
@@ -526,20 +526,24 @@ bool ovs_meter_execute(struct datapath *dp, struct sk_buff *skb,
526 526
527static struct genl_ops dp_meter_genl_ops[] = { 527static struct genl_ops dp_meter_genl_ops[] = {
528 { .cmd = OVS_METER_CMD_FEATURES, 528 { .cmd = OVS_METER_CMD_FEATURES,
529 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
529 .flags = 0, /* OK for unprivileged users. */ 530 .flags = 0, /* OK for unprivileged users. */
530 .doit = ovs_meter_cmd_features 531 .doit = ovs_meter_cmd_features
531 }, 532 },
532 { .cmd = OVS_METER_CMD_SET, 533 { .cmd = OVS_METER_CMD_SET,
534 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
533 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 535 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
534 * privilege. 536 * privilege.
535 */ 537 */
536 .doit = ovs_meter_cmd_set, 538 .doit = ovs_meter_cmd_set,
537 }, 539 },
538 { .cmd = OVS_METER_CMD_GET, 540 { .cmd = OVS_METER_CMD_GET,
541 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
539 .flags = 0, /* OK for unprivileged users. */ 542 .flags = 0, /* OK for unprivileged users. */
540 .doit = ovs_meter_cmd_get, 543 .doit = ovs_meter_cmd_get,
541 }, 544 },
542 { .cmd = OVS_METER_CMD_DEL, 545 { .cmd = OVS_METER_CMD_DEL,
546 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
543 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 547 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
544 * privilege. 548 * privilege.
545 */ 549 */
diff --git a/net/psample/psample.c b/net/psample/psample.c
index 64f95624f219..a107b2405668 100644
--- a/net/psample/psample.c
+++ b/net/psample/psample.c
@@ -100,6 +100,7 @@ static int psample_nl_cmd_get_group_dumpit(struct sk_buff *msg,
100static const struct genl_ops psample_nl_ops[] = { 100static const struct genl_ops psample_nl_ops[] = {
101 { 101 {
102 .cmd = PSAMPLE_CMD_GET_GROUP, 102 .cmd = PSAMPLE_CMD_GET_GROUP,
103 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
103 .dumpit = psample_nl_cmd_get_group_dumpit, 104 .dumpit = psample_nl_cmd_get_group_dumpit,
104 /* can be retrieved by unprivileged users */ 105 /* can be retrieved by unprivileged users */
105 } 106 }
diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c
index 9f5d8f36f2d7..bab2da8cf17a 100644
--- a/net/smc/smc_pnet.c
+++ b/net/smc/smc_pnet.c
@@ -612,6 +612,7 @@ static int smc_pnet_flush(struct sk_buff *skb, struct genl_info *info)
612static const struct genl_ops smc_pnet_ops[] = { 612static const struct genl_ops smc_pnet_ops[] = {
613 { 613 {
614 .cmd = SMC_PNETID_GET, 614 .cmd = SMC_PNETID_GET,
615 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
615 .flags = GENL_ADMIN_PERM, 616 .flags = GENL_ADMIN_PERM,
616 .doit = smc_pnet_get, 617 .doit = smc_pnet_get,
617 .dumpit = smc_pnet_dump, 618 .dumpit = smc_pnet_dump,
@@ -619,16 +620,19 @@ static const struct genl_ops smc_pnet_ops[] = {
619 }, 620 },
620 { 621 {
621 .cmd = SMC_PNETID_ADD, 622 .cmd = SMC_PNETID_ADD,
623 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
622 .flags = GENL_ADMIN_PERM, 624 .flags = GENL_ADMIN_PERM,
623 .doit = smc_pnet_add 625 .doit = smc_pnet_add
624 }, 626 },
625 { 627 {
626 .cmd = SMC_PNETID_DEL, 628 .cmd = SMC_PNETID_DEL,
629 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
627 .flags = GENL_ADMIN_PERM, 630 .flags = GENL_ADMIN_PERM,
628 .doit = smc_pnet_del 631 .doit = smc_pnet_del
629 }, 632 },
630 { 633 {
631 .cmd = SMC_PNETID_FLUSH, 634 .cmd = SMC_PNETID_FLUSH,
635 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
632 .flags = GENL_ADMIN_PERM, 636 .flags = GENL_ADMIN_PERM,
633 .doit = smc_pnet_flush 637 .doit = smc_pnet_flush
634 } 638 }
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c
index 3d5d0fb5b37c..99bd166bccec 100644
--- a/net/tipc/netlink.c
+++ b/net/tipc/netlink.c
@@ -143,93 +143,114 @@ const struct nla_policy tipc_nl_udp_policy[TIPC_NLA_UDP_MAX + 1] = {
143static const struct genl_ops tipc_genl_v2_ops[] = { 143static const struct genl_ops tipc_genl_v2_ops[] = {
144 { 144 {
145 .cmd = TIPC_NL_BEARER_DISABLE, 145 .cmd = TIPC_NL_BEARER_DISABLE,
146 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
146 .doit = tipc_nl_bearer_disable, 147 .doit = tipc_nl_bearer_disable,
147 }, 148 },
148 { 149 {
149 .cmd = TIPC_NL_BEARER_ENABLE, 150 .cmd = TIPC_NL_BEARER_ENABLE,
151 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
150 .doit = tipc_nl_bearer_enable, 152 .doit = tipc_nl_bearer_enable,
151 }, 153 },
152 { 154 {
153 .cmd = TIPC_NL_BEARER_GET, 155 .cmd = TIPC_NL_BEARER_GET,
156 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
154 .doit = tipc_nl_bearer_get, 157 .doit = tipc_nl_bearer_get,
155 .dumpit = tipc_nl_bearer_dump, 158 .dumpit = tipc_nl_bearer_dump,
156 }, 159 },
157 { 160 {
158 .cmd = TIPC_NL_BEARER_ADD, 161 .cmd = TIPC_NL_BEARER_ADD,
162 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
159 .doit = tipc_nl_bearer_add, 163 .doit = tipc_nl_bearer_add,
160 }, 164 },
161 { 165 {
162 .cmd = TIPC_NL_BEARER_SET, 166 .cmd = TIPC_NL_BEARER_SET,
167 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
163 .doit = tipc_nl_bearer_set, 168 .doit = tipc_nl_bearer_set,
164 }, 169 },
165 { 170 {
166 .cmd = TIPC_NL_SOCK_GET, 171 .cmd = TIPC_NL_SOCK_GET,
172 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
167 .start = tipc_dump_start, 173 .start = tipc_dump_start,
168 .dumpit = tipc_nl_sk_dump, 174 .dumpit = tipc_nl_sk_dump,
169 .done = tipc_dump_done, 175 .done = tipc_dump_done,
170 }, 176 },
171 { 177 {
172 .cmd = TIPC_NL_PUBL_GET, 178 .cmd = TIPC_NL_PUBL_GET,
179 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
173 .dumpit = tipc_nl_publ_dump, 180 .dumpit = tipc_nl_publ_dump,
174 }, 181 },
175 { 182 {
176 .cmd = TIPC_NL_LINK_GET, 183 .cmd = TIPC_NL_LINK_GET,
184 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
177 .doit = tipc_nl_node_get_link, 185 .doit = tipc_nl_node_get_link,
178 .dumpit = tipc_nl_node_dump_link, 186 .dumpit = tipc_nl_node_dump_link,
179 }, 187 },
180 { 188 {
181 .cmd = TIPC_NL_LINK_SET, 189 .cmd = TIPC_NL_LINK_SET,
190 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
182 .doit = tipc_nl_node_set_link, 191 .doit = tipc_nl_node_set_link,
183 }, 192 },
184 { 193 {
185 .cmd = TIPC_NL_LINK_RESET_STATS, 194 .cmd = TIPC_NL_LINK_RESET_STATS,
195 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
186 .doit = tipc_nl_node_reset_link_stats, 196 .doit = tipc_nl_node_reset_link_stats,
187 }, 197 },
188 { 198 {
189 .cmd = TIPC_NL_MEDIA_GET, 199 .cmd = TIPC_NL_MEDIA_GET,
200 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
190 .doit = tipc_nl_media_get, 201 .doit = tipc_nl_media_get,
191 .dumpit = tipc_nl_media_dump, 202 .dumpit = tipc_nl_media_dump,
192 }, 203 },
193 { 204 {
194 .cmd = TIPC_NL_MEDIA_SET, 205 .cmd = TIPC_NL_MEDIA_SET,
206 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
195 .doit = tipc_nl_media_set, 207 .doit = tipc_nl_media_set,
196 }, 208 },
197 { 209 {
198 .cmd = TIPC_NL_NODE_GET, 210 .cmd = TIPC_NL_NODE_GET,
211 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
199 .dumpit = tipc_nl_node_dump, 212 .dumpit = tipc_nl_node_dump,
200 }, 213 },
201 { 214 {
202 .cmd = TIPC_NL_NET_GET, 215 .cmd = TIPC_NL_NET_GET,
216 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
203 .dumpit = tipc_nl_net_dump, 217 .dumpit = tipc_nl_net_dump,
204 }, 218 },
205 { 219 {
206 .cmd = TIPC_NL_NET_SET, 220 .cmd = TIPC_NL_NET_SET,
221 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
207 .doit = tipc_nl_net_set, 222 .doit = tipc_nl_net_set,
208 }, 223 },
209 { 224 {
210 .cmd = TIPC_NL_NAME_TABLE_GET, 225 .cmd = TIPC_NL_NAME_TABLE_GET,
226 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
211 .dumpit = tipc_nl_name_table_dump, 227 .dumpit = tipc_nl_name_table_dump,
212 }, 228 },
213 { 229 {
214 .cmd = TIPC_NL_MON_SET, 230 .cmd = TIPC_NL_MON_SET,
231 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
215 .doit = tipc_nl_node_set_monitor, 232 .doit = tipc_nl_node_set_monitor,
216 }, 233 },
217 { 234 {
218 .cmd = TIPC_NL_MON_GET, 235 .cmd = TIPC_NL_MON_GET,
236 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
219 .doit = tipc_nl_node_get_monitor, 237 .doit = tipc_nl_node_get_monitor,
220 .dumpit = tipc_nl_node_dump_monitor, 238 .dumpit = tipc_nl_node_dump_monitor,
221 }, 239 },
222 { 240 {
223 .cmd = TIPC_NL_MON_PEER_GET, 241 .cmd = TIPC_NL_MON_PEER_GET,
242 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
224 .dumpit = tipc_nl_node_dump_monitor_peer, 243 .dumpit = tipc_nl_node_dump_monitor_peer,
225 }, 244 },
226 { 245 {
227 .cmd = TIPC_NL_PEER_REMOVE, 246 .cmd = TIPC_NL_PEER_REMOVE,
247 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
228 .doit = tipc_nl_peer_rm, 248 .doit = tipc_nl_peer_rm,
229 }, 249 },
230#ifdef CONFIG_TIPC_MEDIA_UDP 250#ifdef CONFIG_TIPC_MEDIA_UDP
231 { 251 {
232 .cmd = TIPC_NL_UDP_GET_REMOTEIP, 252 .cmd = TIPC_NL_UDP_GET_REMOTEIP,
253 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
233 .dumpit = tipc_udp_nl_dump_remoteip, 254 .dumpit = tipc_udp_nl_dump_remoteip,
234 }, 255 },
235#endif 256#endif
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
index f7269ce934b5..c6a04c09d075 100644
--- a/net/tipc/netlink_compat.c
+++ b/net/tipc/netlink_compat.c
@@ -1305,6 +1305,7 @@ send:
1305static const struct genl_ops tipc_genl_compat_ops[] = { 1305static const struct genl_ops tipc_genl_compat_ops[] = {
1306 { 1306 {
1307 .cmd = TIPC_GENL_CMD, 1307 .cmd = TIPC_GENL_CMD,
1308 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
1308 .doit = tipc_nl_compat_recv, 1309 .doit = tipc_nl_compat_recv,
1309 }, 1310 },
1310}; 1311};
diff --git a/net/wimax/stack.c b/net/wimax/stack.c
index b7f571e55448..4969de672886 100644
--- a/net/wimax/stack.c
+++ b/net/wimax/stack.c
@@ -419,21 +419,25 @@ static const struct nla_policy wimax_gnl_policy[WIMAX_GNL_ATTR_MAX + 1] = {
419static const struct genl_ops wimax_gnl_ops[] = { 419static const struct genl_ops wimax_gnl_ops[] = {
420 { 420 {
421 .cmd = WIMAX_GNL_OP_MSG_FROM_USER, 421 .cmd = WIMAX_GNL_OP_MSG_FROM_USER,
422 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
422 .flags = GENL_ADMIN_PERM, 423 .flags = GENL_ADMIN_PERM,
423 .doit = wimax_gnl_doit_msg_from_user, 424 .doit = wimax_gnl_doit_msg_from_user,
424 }, 425 },
425 { 426 {
426 .cmd = WIMAX_GNL_OP_RESET, 427 .cmd = WIMAX_GNL_OP_RESET,
428 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
427 .flags = GENL_ADMIN_PERM, 429 .flags = GENL_ADMIN_PERM,
428 .doit = wimax_gnl_doit_reset, 430 .doit = wimax_gnl_doit_reset,
429 }, 431 },
430 { 432 {
431 .cmd = WIMAX_GNL_OP_RFKILL, 433 .cmd = WIMAX_GNL_OP_RFKILL,
434 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
432 .flags = GENL_ADMIN_PERM, 435 .flags = GENL_ADMIN_PERM,
433 .doit = wimax_gnl_doit_rfkill, 436 .doit = wimax_gnl_doit_rfkill,
434 }, 437 },
435 { 438 {
436 .cmd = WIMAX_GNL_OP_STATE_GET, 439 .cmd = WIMAX_GNL_OP_STATE_GET,
440 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
437 .flags = GENL_ADMIN_PERM, 441 .flags = GENL_ADMIN_PERM,
438 .doit = wimax_gnl_doit_state_get, 442 .doit = wimax_gnl_doit_state_get,
439 }, 443 },
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 782c8225a90a..fffe4b371e23 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -13591,6 +13591,7 @@ static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
13591static const struct genl_ops nl80211_ops[] = { 13591static const struct genl_ops nl80211_ops[] = {
13592 { 13592 {
13593 .cmd = NL80211_CMD_GET_WIPHY, 13593 .cmd = NL80211_CMD_GET_WIPHY,
13594 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13594 .doit = nl80211_get_wiphy, 13595 .doit = nl80211_get_wiphy,
13595 .dumpit = nl80211_dump_wiphy, 13596 .dumpit = nl80211_dump_wiphy,
13596 .done = nl80211_dump_wiphy_done, 13597 .done = nl80211_dump_wiphy_done,
@@ -13600,12 +13601,14 @@ static const struct genl_ops nl80211_ops[] = {
13600 }, 13601 },
13601 { 13602 {
13602 .cmd = NL80211_CMD_SET_WIPHY, 13603 .cmd = NL80211_CMD_SET_WIPHY,
13604 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13603 .doit = nl80211_set_wiphy, 13605 .doit = nl80211_set_wiphy,
13604 .flags = GENL_UNS_ADMIN_PERM, 13606 .flags = GENL_UNS_ADMIN_PERM,
13605 .internal_flags = NL80211_FLAG_NEED_RTNL, 13607 .internal_flags = NL80211_FLAG_NEED_RTNL,
13606 }, 13608 },
13607 { 13609 {
13608 .cmd = NL80211_CMD_GET_INTERFACE, 13610 .cmd = NL80211_CMD_GET_INTERFACE,
13611 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13609 .doit = nl80211_get_interface, 13612 .doit = nl80211_get_interface,
13610 .dumpit = nl80211_dump_interface, 13613 .dumpit = nl80211_dump_interface,
13611 /* can be retrieved by unprivileged users */ 13614 /* can be retrieved by unprivileged users */
@@ -13614,6 +13617,7 @@ static const struct genl_ops nl80211_ops[] = {
13614 }, 13617 },
13615 { 13618 {
13616 .cmd = NL80211_CMD_SET_INTERFACE, 13619 .cmd = NL80211_CMD_SET_INTERFACE,
13620 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13617 .doit = nl80211_set_interface, 13621 .doit = nl80211_set_interface,
13618 .flags = GENL_UNS_ADMIN_PERM, 13622 .flags = GENL_UNS_ADMIN_PERM,
13619 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13623 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -13621,6 +13625,7 @@ static const struct genl_ops nl80211_ops[] = {
13621 }, 13625 },
13622 { 13626 {
13623 .cmd = NL80211_CMD_NEW_INTERFACE, 13627 .cmd = NL80211_CMD_NEW_INTERFACE,
13628 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13624 .doit = nl80211_new_interface, 13629 .doit = nl80211_new_interface,
13625 .flags = GENL_UNS_ADMIN_PERM, 13630 .flags = GENL_UNS_ADMIN_PERM,
13626 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13631 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -13628,6 +13633,7 @@ static const struct genl_ops nl80211_ops[] = {
13628 }, 13633 },
13629 { 13634 {
13630 .cmd = NL80211_CMD_DEL_INTERFACE, 13635 .cmd = NL80211_CMD_DEL_INTERFACE,
13636 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13631 .doit = nl80211_del_interface, 13637 .doit = nl80211_del_interface,
13632 .flags = GENL_UNS_ADMIN_PERM, 13638 .flags = GENL_UNS_ADMIN_PERM,
13633 .internal_flags = NL80211_FLAG_NEED_WDEV | 13639 .internal_flags = NL80211_FLAG_NEED_WDEV |
@@ -13635,6 +13641,7 @@ static const struct genl_ops nl80211_ops[] = {
13635 }, 13641 },
13636 { 13642 {
13637 .cmd = NL80211_CMD_GET_KEY, 13643 .cmd = NL80211_CMD_GET_KEY,
13644 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13638 .doit = nl80211_get_key, 13645 .doit = nl80211_get_key,
13639 .flags = GENL_UNS_ADMIN_PERM, 13646 .flags = GENL_UNS_ADMIN_PERM,
13640 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13647 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13642,6 +13649,7 @@ static const struct genl_ops nl80211_ops[] = {
13642 }, 13649 },
13643 { 13650 {
13644 .cmd = NL80211_CMD_SET_KEY, 13651 .cmd = NL80211_CMD_SET_KEY,
13652 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13645 .doit = nl80211_set_key, 13653 .doit = nl80211_set_key,
13646 .flags = GENL_UNS_ADMIN_PERM, 13654 .flags = GENL_UNS_ADMIN_PERM,
13647 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13655 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13650,6 +13658,7 @@ static const struct genl_ops nl80211_ops[] = {
13650 }, 13658 },
13651 { 13659 {
13652 .cmd = NL80211_CMD_NEW_KEY, 13660 .cmd = NL80211_CMD_NEW_KEY,
13661 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13653 .doit = nl80211_new_key, 13662 .doit = nl80211_new_key,
13654 .flags = GENL_UNS_ADMIN_PERM, 13663 .flags = GENL_UNS_ADMIN_PERM,
13655 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13664 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13658,6 +13667,7 @@ static const struct genl_ops nl80211_ops[] = {
13658 }, 13667 },
13659 { 13668 {
13660 .cmd = NL80211_CMD_DEL_KEY, 13669 .cmd = NL80211_CMD_DEL_KEY,
13670 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13661 .doit = nl80211_del_key, 13671 .doit = nl80211_del_key,
13662 .flags = GENL_UNS_ADMIN_PERM, 13672 .flags = GENL_UNS_ADMIN_PERM,
13663 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13673 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13665,6 +13675,7 @@ static const struct genl_ops nl80211_ops[] = {
13665 }, 13675 },
13666 { 13676 {
13667 .cmd = NL80211_CMD_SET_BEACON, 13677 .cmd = NL80211_CMD_SET_BEACON,
13678 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13668 .flags = GENL_UNS_ADMIN_PERM, 13679 .flags = GENL_UNS_ADMIN_PERM,
13669 .doit = nl80211_set_beacon, 13680 .doit = nl80211_set_beacon,
13670 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13681 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13672,6 +13683,7 @@ static const struct genl_ops nl80211_ops[] = {
13672 }, 13683 },
13673 { 13684 {
13674 .cmd = NL80211_CMD_START_AP, 13685 .cmd = NL80211_CMD_START_AP,
13686 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13675 .flags = GENL_UNS_ADMIN_PERM, 13687 .flags = GENL_UNS_ADMIN_PERM,
13676 .doit = nl80211_start_ap, 13688 .doit = nl80211_start_ap,
13677 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13689 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13679,6 +13691,7 @@ static const struct genl_ops nl80211_ops[] = {
13679 }, 13691 },
13680 { 13692 {
13681 .cmd = NL80211_CMD_STOP_AP, 13693 .cmd = NL80211_CMD_STOP_AP,
13694 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13682 .flags = GENL_UNS_ADMIN_PERM, 13695 .flags = GENL_UNS_ADMIN_PERM,
13683 .doit = nl80211_stop_ap, 13696 .doit = nl80211_stop_ap,
13684 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13697 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13686,6 +13699,7 @@ static const struct genl_ops nl80211_ops[] = {
13686 }, 13699 },
13687 { 13700 {
13688 .cmd = NL80211_CMD_GET_STATION, 13701 .cmd = NL80211_CMD_GET_STATION,
13702 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13689 .doit = nl80211_get_station, 13703 .doit = nl80211_get_station,
13690 .dumpit = nl80211_dump_station, 13704 .dumpit = nl80211_dump_station,
13691 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13705 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -13693,6 +13707,7 @@ static const struct genl_ops nl80211_ops[] = {
13693 }, 13707 },
13694 { 13708 {
13695 .cmd = NL80211_CMD_SET_STATION, 13709 .cmd = NL80211_CMD_SET_STATION,
13710 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13696 .doit = nl80211_set_station, 13711 .doit = nl80211_set_station,
13697 .flags = GENL_UNS_ADMIN_PERM, 13712 .flags = GENL_UNS_ADMIN_PERM,
13698 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13713 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13700,6 +13715,7 @@ static const struct genl_ops nl80211_ops[] = {
13700 }, 13715 },
13701 { 13716 {
13702 .cmd = NL80211_CMD_NEW_STATION, 13717 .cmd = NL80211_CMD_NEW_STATION,
13718 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13703 .doit = nl80211_new_station, 13719 .doit = nl80211_new_station,
13704 .flags = GENL_UNS_ADMIN_PERM, 13720 .flags = GENL_UNS_ADMIN_PERM,
13705 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13721 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13707,6 +13723,7 @@ static const struct genl_ops nl80211_ops[] = {
13707 }, 13723 },
13708 { 13724 {
13709 .cmd = NL80211_CMD_DEL_STATION, 13725 .cmd = NL80211_CMD_DEL_STATION,
13726 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13710 .doit = nl80211_del_station, 13727 .doit = nl80211_del_station,
13711 .flags = GENL_UNS_ADMIN_PERM, 13728 .flags = GENL_UNS_ADMIN_PERM,
13712 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13729 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13714,6 +13731,7 @@ static const struct genl_ops nl80211_ops[] = {
13714 }, 13731 },
13715 { 13732 {
13716 .cmd = NL80211_CMD_GET_MPATH, 13733 .cmd = NL80211_CMD_GET_MPATH,
13734 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13717 .doit = nl80211_get_mpath, 13735 .doit = nl80211_get_mpath,
13718 .dumpit = nl80211_dump_mpath, 13736 .dumpit = nl80211_dump_mpath,
13719 .flags = GENL_UNS_ADMIN_PERM, 13737 .flags = GENL_UNS_ADMIN_PERM,
@@ -13722,6 +13740,7 @@ static const struct genl_ops nl80211_ops[] = {
13722 }, 13740 },
13723 { 13741 {
13724 .cmd = NL80211_CMD_GET_MPP, 13742 .cmd = NL80211_CMD_GET_MPP,
13743 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13725 .doit = nl80211_get_mpp, 13744 .doit = nl80211_get_mpp,
13726 .dumpit = nl80211_dump_mpp, 13745 .dumpit = nl80211_dump_mpp,
13727 .flags = GENL_UNS_ADMIN_PERM, 13746 .flags = GENL_UNS_ADMIN_PERM,
@@ -13730,6 +13749,7 @@ static const struct genl_ops nl80211_ops[] = {
13730 }, 13749 },
13731 { 13750 {
13732 .cmd = NL80211_CMD_SET_MPATH, 13751 .cmd = NL80211_CMD_SET_MPATH,
13752 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13733 .doit = nl80211_set_mpath, 13753 .doit = nl80211_set_mpath,
13734 .flags = GENL_UNS_ADMIN_PERM, 13754 .flags = GENL_UNS_ADMIN_PERM,
13735 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13755 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13737,6 +13757,7 @@ static const struct genl_ops nl80211_ops[] = {
13737 }, 13757 },
13738 { 13758 {
13739 .cmd = NL80211_CMD_NEW_MPATH, 13759 .cmd = NL80211_CMD_NEW_MPATH,
13760 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13740 .doit = nl80211_new_mpath, 13761 .doit = nl80211_new_mpath,
13741 .flags = GENL_UNS_ADMIN_PERM, 13762 .flags = GENL_UNS_ADMIN_PERM,
13742 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13763 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13744,6 +13765,7 @@ static const struct genl_ops nl80211_ops[] = {
13744 }, 13765 },
13745 { 13766 {
13746 .cmd = NL80211_CMD_DEL_MPATH, 13767 .cmd = NL80211_CMD_DEL_MPATH,
13768 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13747 .doit = nl80211_del_mpath, 13769 .doit = nl80211_del_mpath,
13748 .flags = GENL_UNS_ADMIN_PERM, 13770 .flags = GENL_UNS_ADMIN_PERM,
13749 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13771 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13751,6 +13773,7 @@ static const struct genl_ops nl80211_ops[] = {
13751 }, 13773 },
13752 { 13774 {
13753 .cmd = NL80211_CMD_SET_BSS, 13775 .cmd = NL80211_CMD_SET_BSS,
13776 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13754 .doit = nl80211_set_bss, 13777 .doit = nl80211_set_bss,
13755 .flags = GENL_UNS_ADMIN_PERM, 13778 .flags = GENL_UNS_ADMIN_PERM,
13756 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13779 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13758,6 +13781,7 @@ static const struct genl_ops nl80211_ops[] = {
13758 }, 13781 },
13759 { 13782 {
13760 .cmd = NL80211_CMD_GET_REG, 13783 .cmd = NL80211_CMD_GET_REG,
13784 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13761 .doit = nl80211_get_reg_do, 13785 .doit = nl80211_get_reg_do,
13762 .dumpit = nl80211_get_reg_dump, 13786 .dumpit = nl80211_get_reg_dump,
13763 .internal_flags = NL80211_FLAG_NEED_RTNL, 13787 .internal_flags = NL80211_FLAG_NEED_RTNL,
@@ -13766,6 +13790,7 @@ static const struct genl_ops nl80211_ops[] = {
13766#ifdef CONFIG_CFG80211_CRDA_SUPPORT 13790#ifdef CONFIG_CFG80211_CRDA_SUPPORT
13767 { 13791 {
13768 .cmd = NL80211_CMD_SET_REG, 13792 .cmd = NL80211_CMD_SET_REG,
13793 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13769 .doit = nl80211_set_reg, 13794 .doit = nl80211_set_reg,
13770 .flags = GENL_ADMIN_PERM, 13795 .flags = GENL_ADMIN_PERM,
13771 .internal_flags = NL80211_FLAG_NEED_RTNL, 13796 .internal_flags = NL80211_FLAG_NEED_RTNL,
@@ -13773,16 +13798,19 @@ static const struct genl_ops nl80211_ops[] = {
13773#endif 13798#endif
13774 { 13799 {
13775 .cmd = NL80211_CMD_REQ_SET_REG, 13800 .cmd = NL80211_CMD_REQ_SET_REG,
13801 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13776 .doit = nl80211_req_set_reg, 13802 .doit = nl80211_req_set_reg,
13777 .flags = GENL_ADMIN_PERM, 13803 .flags = GENL_ADMIN_PERM,
13778 }, 13804 },
13779 { 13805 {
13780 .cmd = NL80211_CMD_RELOAD_REGDB, 13806 .cmd = NL80211_CMD_RELOAD_REGDB,
13807 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13781 .doit = nl80211_reload_regdb, 13808 .doit = nl80211_reload_regdb,
13782 .flags = GENL_ADMIN_PERM, 13809 .flags = GENL_ADMIN_PERM,
13783 }, 13810 },
13784 { 13811 {
13785 .cmd = NL80211_CMD_GET_MESH_CONFIG, 13812 .cmd = NL80211_CMD_GET_MESH_CONFIG,
13813 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13786 .doit = nl80211_get_mesh_config, 13814 .doit = nl80211_get_mesh_config,
13787 /* can be retrieved by unprivileged users */ 13815 /* can be retrieved by unprivileged users */
13788 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13816 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13790,6 +13818,7 @@ static const struct genl_ops nl80211_ops[] = {
13790 }, 13818 },
13791 { 13819 {
13792 .cmd = NL80211_CMD_SET_MESH_CONFIG, 13820 .cmd = NL80211_CMD_SET_MESH_CONFIG,
13821 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13793 .doit = nl80211_update_mesh_config, 13822 .doit = nl80211_update_mesh_config,
13794 .flags = GENL_UNS_ADMIN_PERM, 13823 .flags = GENL_UNS_ADMIN_PERM,
13795 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13824 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13797,6 +13826,7 @@ static const struct genl_ops nl80211_ops[] = {
13797 }, 13826 },
13798 { 13827 {
13799 .cmd = NL80211_CMD_TRIGGER_SCAN, 13828 .cmd = NL80211_CMD_TRIGGER_SCAN,
13829 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13800 .doit = nl80211_trigger_scan, 13830 .doit = nl80211_trigger_scan,
13801 .flags = GENL_UNS_ADMIN_PERM, 13831 .flags = GENL_UNS_ADMIN_PERM,
13802 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13832 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13804,6 +13834,7 @@ static const struct genl_ops nl80211_ops[] = {
13804 }, 13834 },
13805 { 13835 {
13806 .cmd = NL80211_CMD_ABORT_SCAN, 13836 .cmd = NL80211_CMD_ABORT_SCAN,
13837 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13807 .doit = nl80211_abort_scan, 13838 .doit = nl80211_abort_scan,
13808 .flags = GENL_UNS_ADMIN_PERM, 13839 .flags = GENL_UNS_ADMIN_PERM,
13809 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13840 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13811,10 +13842,12 @@ static const struct genl_ops nl80211_ops[] = {
13811 }, 13842 },
13812 { 13843 {
13813 .cmd = NL80211_CMD_GET_SCAN, 13844 .cmd = NL80211_CMD_GET_SCAN,
13845 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13814 .dumpit = nl80211_dump_scan, 13846 .dumpit = nl80211_dump_scan,
13815 }, 13847 },
13816 { 13848 {
13817 .cmd = NL80211_CMD_START_SCHED_SCAN, 13849 .cmd = NL80211_CMD_START_SCHED_SCAN,
13850 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13818 .doit = nl80211_start_sched_scan, 13851 .doit = nl80211_start_sched_scan,
13819 .flags = GENL_UNS_ADMIN_PERM, 13852 .flags = GENL_UNS_ADMIN_PERM,
13820 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13853 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13822,6 +13855,7 @@ static const struct genl_ops nl80211_ops[] = {
13822 }, 13855 },
13823 { 13856 {
13824 .cmd = NL80211_CMD_STOP_SCHED_SCAN, 13857 .cmd = NL80211_CMD_STOP_SCHED_SCAN,
13858 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13825 .doit = nl80211_stop_sched_scan, 13859 .doit = nl80211_stop_sched_scan,
13826 .flags = GENL_UNS_ADMIN_PERM, 13860 .flags = GENL_UNS_ADMIN_PERM,
13827 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13861 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13829,6 +13863,7 @@ static const struct genl_ops nl80211_ops[] = {
13829 }, 13863 },
13830 { 13864 {
13831 .cmd = NL80211_CMD_AUTHENTICATE, 13865 .cmd = NL80211_CMD_AUTHENTICATE,
13866 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13832 .doit = nl80211_authenticate, 13867 .doit = nl80211_authenticate,
13833 .flags = GENL_UNS_ADMIN_PERM, 13868 .flags = GENL_UNS_ADMIN_PERM,
13834 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13869 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13837,6 +13872,7 @@ static const struct genl_ops nl80211_ops[] = {
13837 }, 13872 },
13838 { 13873 {
13839 .cmd = NL80211_CMD_ASSOCIATE, 13874 .cmd = NL80211_CMD_ASSOCIATE,
13875 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13840 .doit = nl80211_associate, 13876 .doit = nl80211_associate,
13841 .flags = GENL_UNS_ADMIN_PERM, 13877 .flags = GENL_UNS_ADMIN_PERM,
13842 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13878 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13845,6 +13881,7 @@ static const struct genl_ops nl80211_ops[] = {
13845 }, 13881 },
13846 { 13882 {
13847 .cmd = NL80211_CMD_DEAUTHENTICATE, 13883 .cmd = NL80211_CMD_DEAUTHENTICATE,
13884 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13848 .doit = nl80211_deauthenticate, 13885 .doit = nl80211_deauthenticate,
13849 .flags = GENL_UNS_ADMIN_PERM, 13886 .flags = GENL_UNS_ADMIN_PERM,
13850 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13887 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13852,6 +13889,7 @@ static const struct genl_ops nl80211_ops[] = {
13852 }, 13889 },
13853 { 13890 {
13854 .cmd = NL80211_CMD_DISASSOCIATE, 13891 .cmd = NL80211_CMD_DISASSOCIATE,
13892 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13855 .doit = nl80211_disassociate, 13893 .doit = nl80211_disassociate,
13856 .flags = GENL_UNS_ADMIN_PERM, 13894 .flags = GENL_UNS_ADMIN_PERM,
13857 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13895 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13859,6 +13897,7 @@ static const struct genl_ops nl80211_ops[] = {
13859 }, 13897 },
13860 { 13898 {
13861 .cmd = NL80211_CMD_JOIN_IBSS, 13899 .cmd = NL80211_CMD_JOIN_IBSS,
13900 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13862 .doit = nl80211_join_ibss, 13901 .doit = nl80211_join_ibss,
13863 .flags = GENL_UNS_ADMIN_PERM, 13902 .flags = GENL_UNS_ADMIN_PERM,
13864 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13903 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13866,6 +13905,7 @@ static const struct genl_ops nl80211_ops[] = {
13866 }, 13905 },
13867 { 13906 {
13868 .cmd = NL80211_CMD_LEAVE_IBSS, 13907 .cmd = NL80211_CMD_LEAVE_IBSS,
13908 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13869 .doit = nl80211_leave_ibss, 13909 .doit = nl80211_leave_ibss,
13870 .flags = GENL_UNS_ADMIN_PERM, 13910 .flags = GENL_UNS_ADMIN_PERM,
13871 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13911 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13874,6 +13914,7 @@ static const struct genl_ops nl80211_ops[] = {
13874#ifdef CONFIG_NL80211_TESTMODE 13914#ifdef CONFIG_NL80211_TESTMODE
13875 { 13915 {
13876 .cmd = NL80211_CMD_TESTMODE, 13916 .cmd = NL80211_CMD_TESTMODE,
13917 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13877 .doit = nl80211_testmode_do, 13918 .doit = nl80211_testmode_do,
13878 .dumpit = nl80211_testmode_dump, 13919 .dumpit = nl80211_testmode_dump,
13879 .flags = GENL_UNS_ADMIN_PERM, 13920 .flags = GENL_UNS_ADMIN_PERM,
@@ -13883,6 +13924,7 @@ static const struct genl_ops nl80211_ops[] = {
13883#endif 13924#endif
13884 { 13925 {
13885 .cmd = NL80211_CMD_CONNECT, 13926 .cmd = NL80211_CMD_CONNECT,
13927 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13886 .doit = nl80211_connect, 13928 .doit = nl80211_connect,
13887 .flags = GENL_UNS_ADMIN_PERM, 13929 .flags = GENL_UNS_ADMIN_PERM,
13888 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13930 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13891,6 +13933,7 @@ static const struct genl_ops nl80211_ops[] = {
13891 }, 13933 },
13892 { 13934 {
13893 .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS, 13935 .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS,
13936 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13894 .doit = nl80211_update_connect_params, 13937 .doit = nl80211_update_connect_params,
13895 .flags = GENL_ADMIN_PERM, 13938 .flags = GENL_ADMIN_PERM,
13896 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13939 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13899,6 +13942,7 @@ static const struct genl_ops nl80211_ops[] = {
13899 }, 13942 },
13900 { 13943 {
13901 .cmd = NL80211_CMD_DISCONNECT, 13944 .cmd = NL80211_CMD_DISCONNECT,
13945 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13902 .doit = nl80211_disconnect, 13946 .doit = nl80211_disconnect,
13903 .flags = GENL_UNS_ADMIN_PERM, 13947 .flags = GENL_UNS_ADMIN_PERM,
13904 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13948 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13906,6 +13950,7 @@ static const struct genl_ops nl80211_ops[] = {
13906 }, 13950 },
13907 { 13951 {
13908 .cmd = NL80211_CMD_SET_WIPHY_NETNS, 13952 .cmd = NL80211_CMD_SET_WIPHY_NETNS,
13953 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13909 .doit = nl80211_wiphy_netns, 13954 .doit = nl80211_wiphy_netns,
13910 .flags = GENL_UNS_ADMIN_PERM, 13955 .flags = GENL_UNS_ADMIN_PERM,
13911 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13956 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -13913,10 +13958,12 @@ static const struct genl_ops nl80211_ops[] = {
13913 }, 13958 },
13914 { 13959 {
13915 .cmd = NL80211_CMD_GET_SURVEY, 13960 .cmd = NL80211_CMD_GET_SURVEY,
13961 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13916 .dumpit = nl80211_dump_survey, 13962 .dumpit = nl80211_dump_survey,
13917 }, 13963 },
13918 { 13964 {
13919 .cmd = NL80211_CMD_SET_PMKSA, 13965 .cmd = NL80211_CMD_SET_PMKSA,
13966 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13920 .doit = nl80211_setdel_pmksa, 13967 .doit = nl80211_setdel_pmksa,
13921 .flags = GENL_UNS_ADMIN_PERM, 13968 .flags = GENL_UNS_ADMIN_PERM,
13922 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13969 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13925,6 +13972,7 @@ static const struct genl_ops nl80211_ops[] = {
13925 }, 13972 },
13926 { 13973 {
13927 .cmd = NL80211_CMD_DEL_PMKSA, 13974 .cmd = NL80211_CMD_DEL_PMKSA,
13975 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13928 .doit = nl80211_setdel_pmksa, 13976 .doit = nl80211_setdel_pmksa,
13929 .flags = GENL_UNS_ADMIN_PERM, 13977 .flags = GENL_UNS_ADMIN_PERM,
13930 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13978 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13932,6 +13980,7 @@ static const struct genl_ops nl80211_ops[] = {
13932 }, 13980 },
13933 { 13981 {
13934 .cmd = NL80211_CMD_FLUSH_PMKSA, 13982 .cmd = NL80211_CMD_FLUSH_PMKSA,
13983 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13935 .doit = nl80211_flush_pmksa, 13984 .doit = nl80211_flush_pmksa,
13936 .flags = GENL_UNS_ADMIN_PERM, 13985 .flags = GENL_UNS_ADMIN_PERM,
13937 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13986 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13939,6 +13988,7 @@ static const struct genl_ops nl80211_ops[] = {
13939 }, 13988 },
13940 { 13989 {
13941 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL, 13990 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL,
13991 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13942 .doit = nl80211_remain_on_channel, 13992 .doit = nl80211_remain_on_channel,
13943 .flags = GENL_UNS_ADMIN_PERM, 13993 .flags = GENL_UNS_ADMIN_PERM,
13944 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13994 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13946,6 +13996,7 @@ static const struct genl_ops nl80211_ops[] = {
13946 }, 13996 },
13947 { 13997 {
13948 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, 13998 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
13999 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13949 .doit = nl80211_cancel_remain_on_channel, 14000 .doit = nl80211_cancel_remain_on_channel,
13950 .flags = GENL_UNS_ADMIN_PERM, 14001 .flags = GENL_UNS_ADMIN_PERM,
13951 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14002 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13953,6 +14004,7 @@ static const struct genl_ops nl80211_ops[] = {
13953 }, 14004 },
13954 { 14005 {
13955 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK, 14006 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK,
14007 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13956 .doit = nl80211_set_tx_bitrate_mask, 14008 .doit = nl80211_set_tx_bitrate_mask,
13957 .flags = GENL_UNS_ADMIN_PERM, 14009 .flags = GENL_UNS_ADMIN_PERM,
13958 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14010 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -13960,6 +14012,7 @@ static const struct genl_ops nl80211_ops[] = {
13960 }, 14012 },
13961 { 14013 {
13962 .cmd = NL80211_CMD_REGISTER_FRAME, 14014 .cmd = NL80211_CMD_REGISTER_FRAME,
14015 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13963 .doit = nl80211_register_mgmt, 14016 .doit = nl80211_register_mgmt,
13964 .flags = GENL_UNS_ADMIN_PERM, 14017 .flags = GENL_UNS_ADMIN_PERM,
13965 .internal_flags = NL80211_FLAG_NEED_WDEV | 14018 .internal_flags = NL80211_FLAG_NEED_WDEV |
@@ -13967,6 +14020,7 @@ static const struct genl_ops nl80211_ops[] = {
13967 }, 14020 },
13968 { 14021 {
13969 .cmd = NL80211_CMD_FRAME, 14022 .cmd = NL80211_CMD_FRAME,
14023 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13970 .doit = nl80211_tx_mgmt, 14024 .doit = nl80211_tx_mgmt,
13971 .flags = GENL_UNS_ADMIN_PERM, 14025 .flags = GENL_UNS_ADMIN_PERM,
13972 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14026 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13974,6 +14028,7 @@ static const struct genl_ops nl80211_ops[] = {
13974 }, 14028 },
13975 { 14029 {
13976 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL, 14030 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL,
14031 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13977 .doit = nl80211_tx_mgmt_cancel_wait, 14032 .doit = nl80211_tx_mgmt_cancel_wait,
13978 .flags = GENL_UNS_ADMIN_PERM, 14033 .flags = GENL_UNS_ADMIN_PERM,
13979 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14034 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -13981,6 +14036,7 @@ static const struct genl_ops nl80211_ops[] = {
13981 }, 14036 },
13982 { 14037 {
13983 .cmd = NL80211_CMD_SET_POWER_SAVE, 14038 .cmd = NL80211_CMD_SET_POWER_SAVE,
14039 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13984 .doit = nl80211_set_power_save, 14040 .doit = nl80211_set_power_save,
13985 .flags = GENL_UNS_ADMIN_PERM, 14041 .flags = GENL_UNS_ADMIN_PERM,
13986 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14042 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -13988,6 +14044,7 @@ static const struct genl_ops nl80211_ops[] = {
13988 }, 14044 },
13989 { 14045 {
13990 .cmd = NL80211_CMD_GET_POWER_SAVE, 14046 .cmd = NL80211_CMD_GET_POWER_SAVE,
14047 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13991 .doit = nl80211_get_power_save, 14048 .doit = nl80211_get_power_save,
13992 /* can be retrieved by unprivileged users */ 14049 /* can be retrieved by unprivileged users */
13993 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14050 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -13995,6 +14052,7 @@ static const struct genl_ops nl80211_ops[] = {
13995 }, 14052 },
13996 { 14053 {
13997 .cmd = NL80211_CMD_SET_CQM, 14054 .cmd = NL80211_CMD_SET_CQM,
14055 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
13998 .doit = nl80211_set_cqm, 14056 .doit = nl80211_set_cqm,
13999 .flags = GENL_UNS_ADMIN_PERM, 14057 .flags = GENL_UNS_ADMIN_PERM,
14000 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14058 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14002,6 +14060,7 @@ static const struct genl_ops nl80211_ops[] = {
14002 }, 14060 },
14003 { 14061 {
14004 .cmd = NL80211_CMD_SET_CHANNEL, 14062 .cmd = NL80211_CMD_SET_CHANNEL,
14063 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14005 .doit = nl80211_set_channel, 14064 .doit = nl80211_set_channel,
14006 .flags = GENL_UNS_ADMIN_PERM, 14065 .flags = GENL_UNS_ADMIN_PERM,
14007 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14066 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14009,6 +14068,7 @@ static const struct genl_ops nl80211_ops[] = {
14009 }, 14068 },
14010 { 14069 {
14011 .cmd = NL80211_CMD_SET_WDS_PEER, 14070 .cmd = NL80211_CMD_SET_WDS_PEER,
14071 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14012 .doit = nl80211_set_wds_peer, 14072 .doit = nl80211_set_wds_peer,
14013 .flags = GENL_UNS_ADMIN_PERM, 14073 .flags = GENL_UNS_ADMIN_PERM,
14014 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14074 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14016,6 +14076,7 @@ static const struct genl_ops nl80211_ops[] = {
14016 }, 14076 },
14017 { 14077 {
14018 .cmd = NL80211_CMD_JOIN_MESH, 14078 .cmd = NL80211_CMD_JOIN_MESH,
14079 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14019 .doit = nl80211_join_mesh, 14080 .doit = nl80211_join_mesh,
14020 .flags = GENL_UNS_ADMIN_PERM, 14081 .flags = GENL_UNS_ADMIN_PERM,
14021 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14082 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14023,6 +14084,7 @@ static const struct genl_ops nl80211_ops[] = {
14023 }, 14084 },
14024 { 14085 {
14025 .cmd = NL80211_CMD_LEAVE_MESH, 14086 .cmd = NL80211_CMD_LEAVE_MESH,
14087 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14026 .doit = nl80211_leave_mesh, 14088 .doit = nl80211_leave_mesh,
14027 .flags = GENL_UNS_ADMIN_PERM, 14089 .flags = GENL_UNS_ADMIN_PERM,
14028 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14090 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14030,6 +14092,7 @@ static const struct genl_ops nl80211_ops[] = {
14030 }, 14092 },
14031 { 14093 {
14032 .cmd = NL80211_CMD_JOIN_OCB, 14094 .cmd = NL80211_CMD_JOIN_OCB,
14095 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14033 .doit = nl80211_join_ocb, 14096 .doit = nl80211_join_ocb,
14034 .flags = GENL_UNS_ADMIN_PERM, 14097 .flags = GENL_UNS_ADMIN_PERM,
14035 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14098 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14037,6 +14100,7 @@ static const struct genl_ops nl80211_ops[] = {
14037 }, 14100 },
14038 { 14101 {
14039 .cmd = NL80211_CMD_LEAVE_OCB, 14102 .cmd = NL80211_CMD_LEAVE_OCB,
14103 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14040 .doit = nl80211_leave_ocb, 14104 .doit = nl80211_leave_ocb,
14041 .flags = GENL_UNS_ADMIN_PERM, 14105 .flags = GENL_UNS_ADMIN_PERM,
14042 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14106 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14045,6 +14109,7 @@ static const struct genl_ops nl80211_ops[] = {
14045#ifdef CONFIG_PM 14109#ifdef CONFIG_PM
14046 { 14110 {
14047 .cmd = NL80211_CMD_GET_WOWLAN, 14111 .cmd = NL80211_CMD_GET_WOWLAN,
14112 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14048 .doit = nl80211_get_wowlan, 14113 .doit = nl80211_get_wowlan,
14049 /* can be retrieved by unprivileged users */ 14114 /* can be retrieved by unprivileged users */
14050 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14115 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -14052,6 +14117,7 @@ static const struct genl_ops nl80211_ops[] = {
14052 }, 14117 },
14053 { 14118 {
14054 .cmd = NL80211_CMD_SET_WOWLAN, 14119 .cmd = NL80211_CMD_SET_WOWLAN,
14120 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14055 .doit = nl80211_set_wowlan, 14121 .doit = nl80211_set_wowlan,
14056 .flags = GENL_UNS_ADMIN_PERM, 14122 .flags = GENL_UNS_ADMIN_PERM,
14057 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14123 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -14060,6 +14126,7 @@ static const struct genl_ops nl80211_ops[] = {
14060#endif 14126#endif
14061 { 14127 {
14062 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD, 14128 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD,
14129 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14063 .doit = nl80211_set_rekey_data, 14130 .doit = nl80211_set_rekey_data,
14064 .flags = GENL_UNS_ADMIN_PERM, 14131 .flags = GENL_UNS_ADMIN_PERM,
14065 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14132 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14068,6 +14135,7 @@ static const struct genl_ops nl80211_ops[] = {
14068 }, 14135 },
14069 { 14136 {
14070 .cmd = NL80211_CMD_TDLS_MGMT, 14137 .cmd = NL80211_CMD_TDLS_MGMT,
14138 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14071 .doit = nl80211_tdls_mgmt, 14139 .doit = nl80211_tdls_mgmt,
14072 .flags = GENL_UNS_ADMIN_PERM, 14140 .flags = GENL_UNS_ADMIN_PERM,
14073 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14141 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14075,6 +14143,7 @@ static const struct genl_ops nl80211_ops[] = {
14075 }, 14143 },
14076 { 14144 {
14077 .cmd = NL80211_CMD_TDLS_OPER, 14145 .cmd = NL80211_CMD_TDLS_OPER,
14146 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14078 .doit = nl80211_tdls_oper, 14147 .doit = nl80211_tdls_oper,
14079 .flags = GENL_UNS_ADMIN_PERM, 14148 .flags = GENL_UNS_ADMIN_PERM,
14080 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14149 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14082,6 +14151,7 @@ static const struct genl_ops nl80211_ops[] = {
14082 }, 14151 },
14083 { 14152 {
14084 .cmd = NL80211_CMD_UNEXPECTED_FRAME, 14153 .cmd = NL80211_CMD_UNEXPECTED_FRAME,
14154 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14085 .doit = nl80211_register_unexpected_frame, 14155 .doit = nl80211_register_unexpected_frame,
14086 .flags = GENL_UNS_ADMIN_PERM, 14156 .flags = GENL_UNS_ADMIN_PERM,
14087 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14157 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14089,6 +14159,7 @@ static const struct genl_ops nl80211_ops[] = {
14089 }, 14159 },
14090 { 14160 {
14091 .cmd = NL80211_CMD_PROBE_CLIENT, 14161 .cmd = NL80211_CMD_PROBE_CLIENT,
14162 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14092 .doit = nl80211_probe_client, 14163 .doit = nl80211_probe_client,
14093 .flags = GENL_UNS_ADMIN_PERM, 14164 .flags = GENL_UNS_ADMIN_PERM,
14094 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14165 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14096,6 +14167,7 @@ static const struct genl_ops nl80211_ops[] = {
14096 }, 14167 },
14097 { 14168 {
14098 .cmd = NL80211_CMD_REGISTER_BEACONS, 14169 .cmd = NL80211_CMD_REGISTER_BEACONS,
14170 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14099 .doit = nl80211_register_beacons, 14171 .doit = nl80211_register_beacons,
14100 .flags = GENL_UNS_ADMIN_PERM, 14172 .flags = GENL_UNS_ADMIN_PERM,
14101 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14173 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -14103,6 +14175,7 @@ static const struct genl_ops nl80211_ops[] = {
14103 }, 14175 },
14104 { 14176 {
14105 .cmd = NL80211_CMD_SET_NOACK_MAP, 14177 .cmd = NL80211_CMD_SET_NOACK_MAP,
14178 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14106 .doit = nl80211_set_noack_map, 14179 .doit = nl80211_set_noack_map,
14107 .flags = GENL_UNS_ADMIN_PERM, 14180 .flags = GENL_UNS_ADMIN_PERM,
14108 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14181 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14110,6 +14183,7 @@ static const struct genl_ops nl80211_ops[] = {
14110 }, 14183 },
14111 { 14184 {
14112 .cmd = NL80211_CMD_START_P2P_DEVICE, 14185 .cmd = NL80211_CMD_START_P2P_DEVICE,
14186 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14113 .doit = nl80211_start_p2p_device, 14187 .doit = nl80211_start_p2p_device,
14114 .flags = GENL_UNS_ADMIN_PERM, 14188 .flags = GENL_UNS_ADMIN_PERM,
14115 .internal_flags = NL80211_FLAG_NEED_WDEV | 14189 .internal_flags = NL80211_FLAG_NEED_WDEV |
@@ -14117,6 +14191,7 @@ static const struct genl_ops nl80211_ops[] = {
14117 }, 14191 },
14118 { 14192 {
14119 .cmd = NL80211_CMD_STOP_P2P_DEVICE, 14193 .cmd = NL80211_CMD_STOP_P2P_DEVICE,
14194 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14120 .doit = nl80211_stop_p2p_device, 14195 .doit = nl80211_stop_p2p_device,
14121 .flags = GENL_UNS_ADMIN_PERM, 14196 .flags = GENL_UNS_ADMIN_PERM,
14122 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14197 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14124,6 +14199,7 @@ static const struct genl_ops nl80211_ops[] = {
14124 }, 14199 },
14125 { 14200 {
14126 .cmd = NL80211_CMD_START_NAN, 14201 .cmd = NL80211_CMD_START_NAN,
14202 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14127 .doit = nl80211_start_nan, 14203 .doit = nl80211_start_nan,
14128 .flags = GENL_ADMIN_PERM, 14204 .flags = GENL_ADMIN_PERM,
14129 .internal_flags = NL80211_FLAG_NEED_WDEV | 14205 .internal_flags = NL80211_FLAG_NEED_WDEV |
@@ -14131,6 +14207,7 @@ static const struct genl_ops nl80211_ops[] = {
14131 }, 14207 },
14132 { 14208 {
14133 .cmd = NL80211_CMD_STOP_NAN, 14209 .cmd = NL80211_CMD_STOP_NAN,
14210 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14134 .doit = nl80211_stop_nan, 14211 .doit = nl80211_stop_nan,
14135 .flags = GENL_ADMIN_PERM, 14212 .flags = GENL_ADMIN_PERM,
14136 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14213 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14138,6 +14215,7 @@ static const struct genl_ops nl80211_ops[] = {
14138 }, 14215 },
14139 { 14216 {
14140 .cmd = NL80211_CMD_ADD_NAN_FUNCTION, 14217 .cmd = NL80211_CMD_ADD_NAN_FUNCTION,
14218 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14141 .doit = nl80211_nan_add_func, 14219 .doit = nl80211_nan_add_func,
14142 .flags = GENL_ADMIN_PERM, 14220 .flags = GENL_ADMIN_PERM,
14143 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14221 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14145,6 +14223,7 @@ static const struct genl_ops nl80211_ops[] = {
14145 }, 14223 },
14146 { 14224 {
14147 .cmd = NL80211_CMD_DEL_NAN_FUNCTION, 14225 .cmd = NL80211_CMD_DEL_NAN_FUNCTION,
14226 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14148 .doit = nl80211_nan_del_func, 14227 .doit = nl80211_nan_del_func,
14149 .flags = GENL_ADMIN_PERM, 14228 .flags = GENL_ADMIN_PERM,
14150 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14229 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14152,6 +14231,7 @@ static const struct genl_ops nl80211_ops[] = {
14152 }, 14231 },
14153 { 14232 {
14154 .cmd = NL80211_CMD_CHANGE_NAN_CONFIG, 14233 .cmd = NL80211_CMD_CHANGE_NAN_CONFIG,
14234 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14155 .doit = nl80211_nan_change_config, 14235 .doit = nl80211_nan_change_config,
14156 .flags = GENL_ADMIN_PERM, 14236 .flags = GENL_ADMIN_PERM,
14157 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14237 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14159,6 +14239,7 @@ static const struct genl_ops nl80211_ops[] = {
14159 }, 14239 },
14160 { 14240 {
14161 .cmd = NL80211_CMD_SET_MCAST_RATE, 14241 .cmd = NL80211_CMD_SET_MCAST_RATE,
14242 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14162 .doit = nl80211_set_mcast_rate, 14243 .doit = nl80211_set_mcast_rate,
14163 .flags = GENL_UNS_ADMIN_PERM, 14244 .flags = GENL_UNS_ADMIN_PERM,
14164 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14245 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14166,6 +14247,7 @@ static const struct genl_ops nl80211_ops[] = {
14166 }, 14247 },
14167 { 14248 {
14168 .cmd = NL80211_CMD_SET_MAC_ACL, 14249 .cmd = NL80211_CMD_SET_MAC_ACL,
14250 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14169 .doit = nl80211_set_mac_acl, 14251 .doit = nl80211_set_mac_acl,
14170 .flags = GENL_UNS_ADMIN_PERM, 14252 .flags = GENL_UNS_ADMIN_PERM,
14171 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14253 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14173,6 +14255,7 @@ static const struct genl_ops nl80211_ops[] = {
14173 }, 14255 },
14174 { 14256 {
14175 .cmd = NL80211_CMD_RADAR_DETECT, 14257 .cmd = NL80211_CMD_RADAR_DETECT,
14258 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14176 .doit = nl80211_start_radar_detection, 14259 .doit = nl80211_start_radar_detection,
14177 .flags = GENL_UNS_ADMIN_PERM, 14260 .flags = GENL_UNS_ADMIN_PERM,
14178 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14261 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14180,10 +14263,12 @@ static const struct genl_ops nl80211_ops[] = {
14180 }, 14263 },
14181 { 14264 {
14182 .cmd = NL80211_CMD_GET_PROTOCOL_FEATURES, 14265 .cmd = NL80211_CMD_GET_PROTOCOL_FEATURES,
14266 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14183 .doit = nl80211_get_protocol_features, 14267 .doit = nl80211_get_protocol_features,
14184 }, 14268 },
14185 { 14269 {
14186 .cmd = NL80211_CMD_UPDATE_FT_IES, 14270 .cmd = NL80211_CMD_UPDATE_FT_IES,
14271 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14187 .doit = nl80211_update_ft_ies, 14272 .doit = nl80211_update_ft_ies,
14188 .flags = GENL_UNS_ADMIN_PERM, 14273 .flags = GENL_UNS_ADMIN_PERM,
14189 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14274 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14191,6 +14276,7 @@ static const struct genl_ops nl80211_ops[] = {
14191 }, 14276 },
14192 { 14277 {
14193 .cmd = NL80211_CMD_CRIT_PROTOCOL_START, 14278 .cmd = NL80211_CMD_CRIT_PROTOCOL_START,
14279 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14194 .doit = nl80211_crit_protocol_start, 14280 .doit = nl80211_crit_protocol_start,
14195 .flags = GENL_UNS_ADMIN_PERM, 14281 .flags = GENL_UNS_ADMIN_PERM,
14196 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14282 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14198,6 +14284,7 @@ static const struct genl_ops nl80211_ops[] = {
14198 }, 14284 },
14199 { 14285 {
14200 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP, 14286 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP,
14287 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14201 .doit = nl80211_crit_protocol_stop, 14288 .doit = nl80211_crit_protocol_stop,
14202 .flags = GENL_UNS_ADMIN_PERM, 14289 .flags = GENL_UNS_ADMIN_PERM,
14203 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14290 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14205,12 +14292,14 @@ static const struct genl_ops nl80211_ops[] = {
14205 }, 14292 },
14206 { 14293 {
14207 .cmd = NL80211_CMD_GET_COALESCE, 14294 .cmd = NL80211_CMD_GET_COALESCE,
14295 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14208 .doit = nl80211_get_coalesce, 14296 .doit = nl80211_get_coalesce,
14209 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14297 .internal_flags = NL80211_FLAG_NEED_WIPHY |
14210 NL80211_FLAG_NEED_RTNL, 14298 NL80211_FLAG_NEED_RTNL,
14211 }, 14299 },
14212 { 14300 {
14213 .cmd = NL80211_CMD_SET_COALESCE, 14301 .cmd = NL80211_CMD_SET_COALESCE,
14302 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14214 .doit = nl80211_set_coalesce, 14303 .doit = nl80211_set_coalesce,
14215 .flags = GENL_UNS_ADMIN_PERM, 14304 .flags = GENL_UNS_ADMIN_PERM,
14216 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14305 .internal_flags = NL80211_FLAG_NEED_WIPHY |
@@ -14218,6 +14307,7 @@ static const struct genl_ops nl80211_ops[] = {
14218 }, 14307 },
14219 { 14308 {
14220 .cmd = NL80211_CMD_CHANNEL_SWITCH, 14309 .cmd = NL80211_CMD_CHANNEL_SWITCH,
14310 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14221 .doit = nl80211_channel_switch, 14311 .doit = nl80211_channel_switch,
14222 .flags = GENL_UNS_ADMIN_PERM, 14312 .flags = GENL_UNS_ADMIN_PERM,
14223 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14313 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14225,6 +14315,7 @@ static const struct genl_ops nl80211_ops[] = {
14225 }, 14315 },
14226 { 14316 {
14227 .cmd = NL80211_CMD_VENDOR, 14317 .cmd = NL80211_CMD_VENDOR,
14318 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14228 .doit = nl80211_vendor_cmd, 14319 .doit = nl80211_vendor_cmd,
14229 .dumpit = nl80211_vendor_cmd_dump, 14320 .dumpit = nl80211_vendor_cmd_dump,
14230 .flags = GENL_UNS_ADMIN_PERM, 14321 .flags = GENL_UNS_ADMIN_PERM,
@@ -14234,6 +14325,7 @@ static const struct genl_ops nl80211_ops[] = {
14234 }, 14325 },
14235 { 14326 {
14236 .cmd = NL80211_CMD_SET_QOS_MAP, 14327 .cmd = NL80211_CMD_SET_QOS_MAP,
14328 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14237 .doit = nl80211_set_qos_map, 14329 .doit = nl80211_set_qos_map,
14238 .flags = GENL_UNS_ADMIN_PERM, 14330 .flags = GENL_UNS_ADMIN_PERM,
14239 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14331 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14241,6 +14333,7 @@ static const struct genl_ops nl80211_ops[] = {
14241 }, 14333 },
14242 { 14334 {
14243 .cmd = NL80211_CMD_ADD_TX_TS, 14335 .cmd = NL80211_CMD_ADD_TX_TS,
14336 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14244 .doit = nl80211_add_tx_ts, 14337 .doit = nl80211_add_tx_ts,
14245 .flags = GENL_UNS_ADMIN_PERM, 14338 .flags = GENL_UNS_ADMIN_PERM,
14246 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14339 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14248,6 +14341,7 @@ static const struct genl_ops nl80211_ops[] = {
14248 }, 14341 },
14249 { 14342 {
14250 .cmd = NL80211_CMD_DEL_TX_TS, 14343 .cmd = NL80211_CMD_DEL_TX_TS,
14344 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14251 .doit = nl80211_del_tx_ts, 14345 .doit = nl80211_del_tx_ts,
14252 .flags = GENL_UNS_ADMIN_PERM, 14346 .flags = GENL_UNS_ADMIN_PERM,
14253 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14347 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14255,6 +14349,7 @@ static const struct genl_ops nl80211_ops[] = {
14255 }, 14349 },
14256 { 14350 {
14257 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH, 14351 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH,
14352 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14258 .doit = nl80211_tdls_channel_switch, 14353 .doit = nl80211_tdls_channel_switch,
14259 .flags = GENL_UNS_ADMIN_PERM, 14354 .flags = GENL_UNS_ADMIN_PERM,
14260 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14355 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14262,6 +14357,7 @@ static const struct genl_ops nl80211_ops[] = {
14262 }, 14357 },
14263 { 14358 {
14264 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, 14359 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
14360 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14265 .doit = nl80211_tdls_cancel_channel_switch, 14361 .doit = nl80211_tdls_cancel_channel_switch,
14266 .flags = GENL_UNS_ADMIN_PERM, 14362 .flags = GENL_UNS_ADMIN_PERM,
14267 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14363 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14269,6 +14365,7 @@ static const struct genl_ops nl80211_ops[] = {
14269 }, 14365 },
14270 { 14366 {
14271 .cmd = NL80211_CMD_SET_MULTICAST_TO_UNICAST, 14367 .cmd = NL80211_CMD_SET_MULTICAST_TO_UNICAST,
14368 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14272 .doit = nl80211_set_multicast_to_unicast, 14369 .doit = nl80211_set_multicast_to_unicast,
14273 .flags = GENL_UNS_ADMIN_PERM, 14370 .flags = GENL_UNS_ADMIN_PERM,
14274 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14371 .internal_flags = NL80211_FLAG_NEED_NETDEV |
@@ -14276,6 +14373,7 @@ static const struct genl_ops nl80211_ops[] = {
14276 }, 14373 },
14277 { 14374 {
14278 .cmd = NL80211_CMD_SET_PMK, 14375 .cmd = NL80211_CMD_SET_PMK,
14376 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14279 .doit = nl80211_set_pmk, 14377 .doit = nl80211_set_pmk,
14280 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14378 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14281 NL80211_FLAG_NEED_RTNL | 14379 NL80211_FLAG_NEED_RTNL |
@@ -14283,12 +14381,14 @@ static const struct genl_ops nl80211_ops[] = {
14283 }, 14381 },
14284 { 14382 {
14285 .cmd = NL80211_CMD_DEL_PMK, 14383 .cmd = NL80211_CMD_DEL_PMK,
14384 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14286 .doit = nl80211_del_pmk, 14385 .doit = nl80211_del_pmk,
14287 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14386 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14288 NL80211_FLAG_NEED_RTNL, 14387 NL80211_FLAG_NEED_RTNL,
14289 }, 14388 },
14290 { 14389 {
14291 .cmd = NL80211_CMD_EXTERNAL_AUTH, 14390 .cmd = NL80211_CMD_EXTERNAL_AUTH,
14391 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14292 .doit = nl80211_external_auth, 14392 .doit = nl80211_external_auth,
14293 .flags = GENL_ADMIN_PERM, 14393 .flags = GENL_ADMIN_PERM,
14294 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14394 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14296,6 +14396,7 @@ static const struct genl_ops nl80211_ops[] = {
14296 }, 14396 },
14297 { 14397 {
14298 .cmd = NL80211_CMD_CONTROL_PORT_FRAME, 14398 .cmd = NL80211_CMD_CONTROL_PORT_FRAME,
14399 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14299 .doit = nl80211_tx_control_port, 14400 .doit = nl80211_tx_control_port,
14300 .flags = GENL_UNS_ADMIN_PERM, 14401 .flags = GENL_UNS_ADMIN_PERM,
14301 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14402 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -14303,12 +14404,14 @@ static const struct genl_ops nl80211_ops[] = {
14303 }, 14404 },
14304 { 14405 {
14305 .cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS, 14406 .cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS,
14407 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14306 .doit = nl80211_get_ftm_responder_stats, 14408 .doit = nl80211_get_ftm_responder_stats,
14307 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14409 .internal_flags = NL80211_FLAG_NEED_NETDEV |
14308 NL80211_FLAG_NEED_RTNL, 14410 NL80211_FLAG_NEED_RTNL,
14309 }, 14411 },
14310 { 14412 {
14311 .cmd = NL80211_CMD_PEER_MEASUREMENT_START, 14413 .cmd = NL80211_CMD_PEER_MEASUREMENT_START,
14414 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14312 .doit = nl80211_pmsr_start, 14415 .doit = nl80211_pmsr_start,
14313 .flags = GENL_UNS_ADMIN_PERM, 14416 .flags = GENL_UNS_ADMIN_PERM,
14314 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14417 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
@@ -14316,6 +14419,7 @@ static const struct genl_ops nl80211_ops[] = {
14316 }, 14419 },
14317 { 14420 {
14318 .cmd = NL80211_CMD_NOTIFY_RADAR, 14421 .cmd = NL80211_CMD_NOTIFY_RADAR,
14422 .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
14319 .doit = nl80211_notify_radar_detection, 14423 .doit = nl80211_notify_radar_detection,
14320 .flags = GENL_UNS_ADMIN_PERM, 14424 .flags = GENL_UNS_ADMIN_PERM,
14321 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14425 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |