summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 |