aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2019-03-21 17:51:02 -0400
committerDavid S. Miller <davem@davemloft.net>2019-03-22 10:38:23 -0400
commit3b0f31f2b8c9fb348e4530b88f6b64f9621f83d6 (patch)
tree8dcb4d7bede0f23070f3de8a14af775dd9ef07e1
parent601ed4d6dc3a779a31af6376488a988abccfac37 (diff)
genetlink: make policy common to family
Since maxattr is common, the policy can't really differ sanely, so make it common as well. The only user that did in fact manage to make a non-common policy is taskstats, which has to be really careful about it (since it's still using a common maxattr!). This is no longer supported, but we can fake it using pre_doit. This reduces the size of e.g. nl80211.o (which has lots of commands): text data bss dec hex filename 398745 14323 2240 415308 6564c net/wireless/nl80211.o (before) 397913 14331 2240 414484 65314 net/wireless/nl80211.o (after) -------------------------------- -832 +8 0 -824 Which is obviously just 8 bytes for each command, and an added 8 bytes for the new policy pointer. I'm not sure why the ops list is counted as .text though. Most of the code transformations were done using the following spatch: @ops@ identifier OPS; expression POLICY; @@ struct genl_ops OPS[] = { ..., { - .policy = POLICY, }, ... }; @@ identifier ops.OPS; expression ops.POLICY; identifier fam; expression M; @@ struct genl_family fam = { .ops = OPS, .maxattr = M, + .policy = POLICY, ... }; This also gets rid of devlink_nl_cmd_region_read_dumpit() accessing the cb->data as ops, which we want to change in a later genl patch. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/block/nbd.c5
-rw-r--r--drivers/net/gtp.c4
-rw-r--r--drivers/net/ieee802154/mac802154_hwsim.c7
-rw-r--r--drivers/net/macsec.c11
-rw-r--r--drivers/net/team/team.c5
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c7
-rw-r--r--drivers/target/target_core_user.c5
-rw-r--r--include/linux/genl_magic_func.h4
-rw-r--r--include/net/genetlink.h4
-rw-r--r--kernel/taskstats.c28
-rw-r--r--net/batman-adv/netlink.c19
-rw-r--r--net/core/devlink.c43
-rw-r--r--net/hsr/hsr_netlink.c3
-rw-r--r--net/ieee802154/ieee802154.h2
-rw-r--r--net/ieee802154/netlink.c1
-rw-r--r--net/ieee802154/nl802154.c30
-rw-r--r--net/ipv4/fou.c4
-rw-r--r--net/ipv4/tcp_metrics.c3
-rw-r--r--net/ipv6/ila/ila_main.c5
-rw-r--r--net/ipv6/seg6.c5
-rw-r--r--net/l2tp/l2tp_netlink.c10
-rw-r--r--net/ncsi/ncsi-netlink.c7
-rw-r--r--net/netfilter/ipvs/ip_vs_ctl.c13
-rw-r--r--net/netlabel/netlabel_calipso.c5
-rw-r--r--net/netlabel/netlabel_cipso_v4.c5
-rw-r--r--net/netlabel/netlabel_mgmt.c9
-rw-r--r--net/netlabel/netlabel_unlabeled.c9
-rw-r--r--net/netlink/genetlink.c6
-rw-r--r--net/nfc/netlink.c20
-rw-r--r--net/openvswitch/conntrack.c4
-rw-r--r--net/openvswitch/datapath.c17
-rw-r--r--net/openvswitch/meter.c5
-rw-r--r--net/smc/smc_pnet.c5
-rw-r--r--net/tipc/netlink.c22
-rw-r--r--net/wimax/stack.c5
-rw-r--r--net/wireless/nl80211.c105
36 files changed, 68 insertions, 374 deletions
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
index 90ba9f4c03f3..92b8aafb8bb4 100644
--- a/drivers/block/nbd.c
+++ b/drivers/block/nbd.c
@@ -1999,22 +1999,18 @@ out:
1999static const struct genl_ops nbd_connect_genl_ops[] = { 1999static const struct genl_ops nbd_connect_genl_ops[] = {
2000 { 2000 {
2001 .cmd = NBD_CMD_CONNECT, 2001 .cmd = NBD_CMD_CONNECT,
2002 .policy = nbd_attr_policy,
2003 .doit = nbd_genl_connect, 2002 .doit = nbd_genl_connect,
2004 }, 2003 },
2005 { 2004 {
2006 .cmd = NBD_CMD_DISCONNECT, 2005 .cmd = NBD_CMD_DISCONNECT,
2007 .policy = nbd_attr_policy,
2008 .doit = nbd_genl_disconnect, 2006 .doit = nbd_genl_disconnect,
2009 }, 2007 },
2010 { 2008 {
2011 .cmd = NBD_CMD_RECONFIGURE, 2009 .cmd = NBD_CMD_RECONFIGURE,
2012 .policy = nbd_attr_policy,
2013 .doit = nbd_genl_reconfigure, 2010 .doit = nbd_genl_reconfigure,
2014 }, 2011 },
2015 { 2012 {
2016 .cmd = NBD_CMD_STATUS, 2013 .cmd = NBD_CMD_STATUS,
2017 .policy = nbd_attr_policy,
2018 .doit = nbd_genl_status, 2014 .doit = nbd_genl_status,
2019 }, 2015 },
2020}; 2016};
@@ -2031,6 +2027,7 @@ static struct genl_family nbd_genl_family __ro_after_init = {
2031 .ops = nbd_connect_genl_ops, 2027 .ops = nbd_connect_genl_ops,
2032 .n_ops = ARRAY_SIZE(nbd_connect_genl_ops), 2028 .n_ops = ARRAY_SIZE(nbd_connect_genl_ops),
2033 .maxattr = NBD_ATTR_MAX, 2029 .maxattr = NBD_ATTR_MAX,
2030 .policy = nbd_attr_policy,
2034 .mcgrps = nbd_mcast_grps, 2031 .mcgrps = nbd_mcast_grps,
2035 .n_mcgrps = ARRAY_SIZE(nbd_mcast_grps), 2032 .n_mcgrps = ARRAY_SIZE(nbd_mcast_grps),
2036}; 2033};
diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
index 7a145172d503..c06e31747288 100644
--- a/drivers/net/gtp.c
+++ b/drivers/net/gtp.c
@@ -1271,20 +1271,17 @@ static const struct genl_ops gtp_genl_ops[] = {
1271 { 1271 {
1272 .cmd = GTP_CMD_NEWPDP, 1272 .cmd = GTP_CMD_NEWPDP,
1273 .doit = gtp_genl_new_pdp, 1273 .doit = gtp_genl_new_pdp,
1274 .policy = gtp_genl_policy,
1275 .flags = GENL_ADMIN_PERM, 1274 .flags = GENL_ADMIN_PERM,
1276 }, 1275 },
1277 { 1276 {
1278 .cmd = GTP_CMD_DELPDP, 1277 .cmd = GTP_CMD_DELPDP,
1279 .doit = gtp_genl_del_pdp, 1278 .doit = gtp_genl_del_pdp,
1280 .policy = gtp_genl_policy,
1281 .flags = GENL_ADMIN_PERM, 1279 .flags = GENL_ADMIN_PERM,
1282 }, 1280 },
1283 { 1281 {
1284 .cmd = GTP_CMD_GETPDP, 1282 .cmd = GTP_CMD_GETPDP,
1285 .doit = gtp_genl_get_pdp, 1283 .doit = gtp_genl_get_pdp,
1286 .dumpit = gtp_genl_dump_pdp, 1284 .dumpit = gtp_genl_dump_pdp,
1287 .policy = gtp_genl_policy,
1288 .flags = GENL_ADMIN_PERM, 1285 .flags = GENL_ADMIN_PERM,
1289 }, 1286 },
1290}; 1287};
@@ -1294,6 +1291,7 @@ static struct genl_family gtp_genl_family __ro_after_init = {
1294 .version = 0, 1291 .version = 0,
1295 .hdrsize = 0, 1292 .hdrsize = 0,
1296 .maxattr = GTPA_MAX, 1293 .maxattr = GTPA_MAX,
1294 .policy = gtp_genl_policy,
1297 .netnsok = true, 1295 .netnsok = true,
1298 .module = THIS_MODULE, 1296 .module = THIS_MODULE,
1299 .ops = gtp_genl_ops, 1297 .ops = gtp_genl_ops,
diff --git a/drivers/net/ieee802154/mac802154_hwsim.c b/drivers/net/ieee802154/mac802154_hwsim.c
index b6743f03dce0..49866737f138 100644
--- a/drivers/net/ieee802154/mac802154_hwsim.c
+++ b/drivers/net/ieee802154/mac802154_hwsim.c
@@ -598,37 +598,31 @@ static const struct nla_policy hwsim_genl_policy[MAC802154_HWSIM_ATTR_MAX + 1] =
598static const struct genl_ops hwsim_nl_ops[] = { 598static const struct genl_ops hwsim_nl_ops[] = {
599 { 599 {
600 .cmd = MAC802154_HWSIM_CMD_NEW_RADIO, 600 .cmd = MAC802154_HWSIM_CMD_NEW_RADIO,
601 .policy = hwsim_genl_policy,
602 .doit = hwsim_new_radio_nl, 601 .doit = hwsim_new_radio_nl,
603 .flags = GENL_UNS_ADMIN_PERM, 602 .flags = GENL_UNS_ADMIN_PERM,
604 }, 603 },
605 { 604 {
606 .cmd = MAC802154_HWSIM_CMD_DEL_RADIO, 605 .cmd = MAC802154_HWSIM_CMD_DEL_RADIO,
607 .policy = hwsim_genl_policy,
608 .doit = hwsim_del_radio_nl, 606 .doit = hwsim_del_radio_nl,
609 .flags = GENL_UNS_ADMIN_PERM, 607 .flags = GENL_UNS_ADMIN_PERM,
610 }, 608 },
611 { 609 {
612 .cmd = MAC802154_HWSIM_CMD_GET_RADIO, 610 .cmd = MAC802154_HWSIM_CMD_GET_RADIO,
613 .policy = hwsim_genl_policy,
614 .doit = hwsim_get_radio_nl, 611 .doit = hwsim_get_radio_nl,
615 .dumpit = hwsim_dump_radio_nl, 612 .dumpit = hwsim_dump_radio_nl,
616 }, 613 },
617 { 614 {
618 .cmd = MAC802154_HWSIM_CMD_NEW_EDGE, 615 .cmd = MAC802154_HWSIM_CMD_NEW_EDGE,
619 .policy = hwsim_genl_policy,
620 .doit = hwsim_new_edge_nl, 616 .doit = hwsim_new_edge_nl,
621 .flags = GENL_UNS_ADMIN_PERM, 617 .flags = GENL_UNS_ADMIN_PERM,
622 }, 618 },
623 { 619 {
624 .cmd = MAC802154_HWSIM_CMD_DEL_EDGE, 620 .cmd = MAC802154_HWSIM_CMD_DEL_EDGE,
625 .policy = hwsim_genl_policy,
626 .doit = hwsim_del_edge_nl, 621 .doit = hwsim_del_edge_nl,
627 .flags = GENL_UNS_ADMIN_PERM, 622 .flags = GENL_UNS_ADMIN_PERM,
628 }, 623 },
629 { 624 {
630 .cmd = MAC802154_HWSIM_CMD_SET_EDGE, 625 .cmd = MAC802154_HWSIM_CMD_SET_EDGE,
631 .policy = hwsim_genl_policy,
632 .doit = hwsim_set_edge_lqi, 626 .doit = hwsim_set_edge_lqi,
633 .flags = GENL_UNS_ADMIN_PERM, 627 .flags = GENL_UNS_ADMIN_PERM,
634 }, 628 },
@@ -638,6 +632,7 @@ static struct genl_family hwsim_genl_family __ro_after_init = {
638 .name = "MAC802154_HWSIM", 632 .name = "MAC802154_HWSIM",
639 .version = 1, 633 .version = 1,
640 .maxattr = MAC802154_HWSIM_ATTR_MAX, 634 .maxattr = MAC802154_HWSIM_ATTR_MAX,
635 .policy = hwsim_genl_policy,
641 .module = THIS_MODULE, 636 .module = THIS_MODULE,
642 .ops = hwsim_nl_ops, 637 .ops = hwsim_nl_ops,
643 .n_ops = ARRAY_SIZE(hwsim_nl_ops), 638 .n_ops = ARRAY_SIZE(hwsim_nl_ops),
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 64a982563d59..947c40f112d1 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2637,60 +2637,50 @@ static const struct genl_ops macsec_genl_ops[] = {
2637 { 2637 {
2638 .cmd = MACSEC_CMD_GET_TXSC, 2638 .cmd = MACSEC_CMD_GET_TXSC,
2639 .dumpit = macsec_dump_txsc, 2639 .dumpit = macsec_dump_txsc,
2640 .policy = macsec_genl_policy,
2641 }, 2640 },
2642 { 2641 {
2643 .cmd = MACSEC_CMD_ADD_RXSC, 2642 .cmd = MACSEC_CMD_ADD_RXSC,
2644 .doit = macsec_add_rxsc, 2643 .doit = macsec_add_rxsc,
2645 .policy = macsec_genl_policy,
2646 .flags = GENL_ADMIN_PERM, 2644 .flags = GENL_ADMIN_PERM,
2647 }, 2645 },
2648 { 2646 {
2649 .cmd = MACSEC_CMD_DEL_RXSC, 2647 .cmd = MACSEC_CMD_DEL_RXSC,
2650 .doit = macsec_del_rxsc, 2648 .doit = macsec_del_rxsc,
2651 .policy = macsec_genl_policy,
2652 .flags = GENL_ADMIN_PERM, 2649 .flags = GENL_ADMIN_PERM,
2653 }, 2650 },
2654 { 2651 {
2655 .cmd = MACSEC_CMD_UPD_RXSC, 2652 .cmd = MACSEC_CMD_UPD_RXSC,
2656 .doit = macsec_upd_rxsc, 2653 .doit = macsec_upd_rxsc,
2657 .policy = macsec_genl_policy,
2658 .flags = GENL_ADMIN_PERM, 2654 .flags = GENL_ADMIN_PERM,
2659 }, 2655 },
2660 { 2656 {
2661 .cmd = MACSEC_CMD_ADD_TXSA, 2657 .cmd = MACSEC_CMD_ADD_TXSA,
2662 .doit = macsec_add_txsa, 2658 .doit = macsec_add_txsa,
2663 .policy = macsec_genl_policy,
2664 .flags = GENL_ADMIN_PERM, 2659 .flags = GENL_ADMIN_PERM,
2665 }, 2660 },
2666 { 2661 {
2667 .cmd = MACSEC_CMD_DEL_TXSA, 2662 .cmd = MACSEC_CMD_DEL_TXSA,
2668 .doit = macsec_del_txsa, 2663 .doit = macsec_del_txsa,
2669 .policy = macsec_genl_policy,
2670 .flags = GENL_ADMIN_PERM, 2664 .flags = GENL_ADMIN_PERM,
2671 }, 2665 },
2672 { 2666 {
2673 .cmd = MACSEC_CMD_UPD_TXSA, 2667 .cmd = MACSEC_CMD_UPD_TXSA,
2674 .doit = macsec_upd_txsa, 2668 .doit = macsec_upd_txsa,
2675 .policy = macsec_genl_policy,
2676 .flags = GENL_ADMIN_PERM, 2669 .flags = GENL_ADMIN_PERM,
2677 }, 2670 },
2678 { 2671 {
2679 .cmd = MACSEC_CMD_ADD_RXSA, 2672 .cmd = MACSEC_CMD_ADD_RXSA,
2680 .doit = macsec_add_rxsa, 2673 .doit = macsec_add_rxsa,
2681 .policy = macsec_genl_policy,
2682 .flags = GENL_ADMIN_PERM, 2674 .flags = GENL_ADMIN_PERM,
2683 }, 2675 },
2684 { 2676 {
2685 .cmd = MACSEC_CMD_DEL_RXSA, 2677 .cmd = MACSEC_CMD_DEL_RXSA,
2686 .doit = macsec_del_rxsa, 2678 .doit = macsec_del_rxsa,
2687 .policy = macsec_genl_policy,
2688 .flags = GENL_ADMIN_PERM, 2679 .flags = GENL_ADMIN_PERM,
2689 }, 2680 },
2690 { 2681 {
2691 .cmd = MACSEC_CMD_UPD_RXSA, 2682 .cmd = MACSEC_CMD_UPD_RXSA,
2692 .doit = macsec_upd_rxsa, 2683 .doit = macsec_upd_rxsa,
2693 .policy = macsec_genl_policy,
2694 .flags = GENL_ADMIN_PERM, 2684 .flags = GENL_ADMIN_PERM,
2695 }, 2685 },
2696}; 2686};
@@ -2700,6 +2690,7 @@ static struct genl_family macsec_fam __ro_after_init = {
2700 .hdrsize = 0, 2690 .hdrsize = 0,
2701 .version = MACSEC_GENL_VERSION, 2691 .version = MACSEC_GENL_VERSION,
2702 .maxattr = MACSEC_ATTR_MAX, 2692 .maxattr = MACSEC_ATTR_MAX,
2693 .policy = macsec_genl_policy,
2703 .netnsok = true, 2694 .netnsok = true,
2704 .module = THIS_MODULE, 2695 .module = THIS_MODULE,
2705 .ops = macsec_genl_ops, 2696 .ops = macsec_genl_ops,
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index ee950aa48e3b..6ad74f898832 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -2725,24 +2725,20 @@ static const struct genl_ops team_nl_ops[] = {
2725 { 2725 {
2726 .cmd = TEAM_CMD_NOOP, 2726 .cmd = TEAM_CMD_NOOP,
2727 .doit = team_nl_cmd_noop, 2727 .doit = team_nl_cmd_noop,
2728 .policy = team_nl_policy,
2729 }, 2728 },
2730 { 2729 {
2731 .cmd = TEAM_CMD_OPTIONS_SET, 2730 .cmd = TEAM_CMD_OPTIONS_SET,
2732 .doit = team_nl_cmd_options_set, 2731 .doit = team_nl_cmd_options_set,
2733 .policy = team_nl_policy,
2734 .flags = GENL_ADMIN_PERM, 2732 .flags = GENL_ADMIN_PERM,
2735 }, 2733 },
2736 { 2734 {
2737 .cmd = TEAM_CMD_OPTIONS_GET, 2735 .cmd = TEAM_CMD_OPTIONS_GET,
2738 .doit = team_nl_cmd_options_get, 2736 .doit = team_nl_cmd_options_get,
2739 .policy = team_nl_policy,
2740 .flags = GENL_ADMIN_PERM, 2737 .flags = GENL_ADMIN_PERM,
2741 }, 2738 },
2742 { 2739 {
2743 .cmd = TEAM_CMD_PORT_LIST_GET, 2740 .cmd = TEAM_CMD_PORT_LIST_GET,
2744 .doit = team_nl_cmd_port_list_get, 2741 .doit = team_nl_cmd_port_list_get,
2745 .policy = team_nl_policy,
2746 .flags = GENL_ADMIN_PERM, 2742 .flags = GENL_ADMIN_PERM,
2747 }, 2743 },
2748}; 2744};
@@ -2755,6 +2751,7 @@ static struct genl_family team_nl_family __ro_after_init = {
2755 .name = TEAM_GENL_NAME, 2751 .name = TEAM_GENL_NAME,
2756 .version = TEAM_GENL_VERSION, 2752 .version = TEAM_GENL_VERSION,
2757 .maxattr = TEAM_ATTR_MAX, 2753 .maxattr = TEAM_ATTR_MAX,
2754 .policy = team_nl_policy,
2758 .netnsok = true, 2755 .netnsok = true,
2759 .module = THIS_MODULE, 2756 .module = THIS_MODULE,
2760 .ops = team_nl_ops, 2757 .ops = team_nl_ops,
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 0838af04d681..4cc7b222859c 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -3620,35 +3620,29 @@ done:
3620static const struct genl_ops hwsim_ops[] = { 3620static const struct genl_ops hwsim_ops[] = {
3621 { 3621 {
3622 .cmd = HWSIM_CMD_REGISTER, 3622 .cmd = HWSIM_CMD_REGISTER,
3623 .policy = hwsim_genl_policy,
3624 .doit = hwsim_register_received_nl, 3623 .doit = hwsim_register_received_nl,
3625 .flags = GENL_UNS_ADMIN_PERM, 3624 .flags = GENL_UNS_ADMIN_PERM,
3626 }, 3625 },
3627 { 3626 {
3628 .cmd = HWSIM_CMD_FRAME, 3627 .cmd = HWSIM_CMD_FRAME,
3629 .policy = hwsim_genl_policy,
3630 .doit = hwsim_cloned_frame_received_nl, 3628 .doit = hwsim_cloned_frame_received_nl,
3631 }, 3629 },
3632 { 3630 {
3633 .cmd = HWSIM_CMD_TX_INFO_FRAME, 3631 .cmd = HWSIM_CMD_TX_INFO_FRAME,
3634 .policy = hwsim_genl_policy,
3635 .doit = hwsim_tx_info_frame_received_nl, 3632 .doit = hwsim_tx_info_frame_received_nl,
3636 }, 3633 },
3637 { 3634 {
3638 .cmd = HWSIM_CMD_NEW_RADIO, 3635 .cmd = HWSIM_CMD_NEW_RADIO,
3639 .policy = hwsim_genl_policy,
3640 .doit = hwsim_new_radio_nl, 3636 .doit = hwsim_new_radio_nl,
3641 .flags = GENL_UNS_ADMIN_PERM, 3637 .flags = GENL_UNS_ADMIN_PERM,
3642 }, 3638 },
3643 { 3639 {
3644 .cmd = HWSIM_CMD_DEL_RADIO, 3640 .cmd = HWSIM_CMD_DEL_RADIO,
3645 .policy = hwsim_genl_policy,
3646 .doit = hwsim_del_radio_nl, 3641 .doit = hwsim_del_radio_nl,
3647 .flags = GENL_UNS_ADMIN_PERM, 3642 .flags = GENL_UNS_ADMIN_PERM,
3648 }, 3643 },
3649 { 3644 {
3650 .cmd = HWSIM_CMD_GET_RADIO, 3645 .cmd = HWSIM_CMD_GET_RADIO,
3651 .policy = hwsim_genl_policy,
3652 .doit = hwsim_get_radio_nl, 3646 .doit = hwsim_get_radio_nl,
3653 .dumpit = hwsim_dump_radio_nl, 3647 .dumpit = hwsim_dump_radio_nl,
3654 }, 3648 },
@@ -3658,6 +3652,7 @@ static struct genl_family hwsim_genl_family __ro_after_init = {
3658 .name = "MAC80211_HWSIM", 3652 .name = "MAC80211_HWSIM",
3659 .version = 1, 3653 .version = 1,
3660 .maxattr = HWSIM_ATTR_MAX, 3654 .maxattr = HWSIM_ATTR_MAX,
3655 .policy = hwsim_genl_policy,
3661 .netnsok = true, 3656 .netnsok = true,
3662 .module = THIS_MODULE, 3657 .module = THIS_MODULE,
3663 .ops = hwsim_ops, 3658 .ops = hwsim_ops,
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
index 5831e0eecea1..845b32eaff36 100644
--- a/drivers/target/target_core_user.c
+++ b/drivers/target/target_core_user.c
@@ -442,25 +442,21 @@ static const struct genl_ops tcmu_genl_ops[] = {
442 { 442 {
443 .cmd = TCMU_CMD_SET_FEATURES, 443 .cmd = TCMU_CMD_SET_FEATURES,
444 .flags = GENL_ADMIN_PERM, 444 .flags = GENL_ADMIN_PERM,
445 .policy = tcmu_attr_policy,
446 .doit = tcmu_genl_set_features, 445 .doit = tcmu_genl_set_features,
447 }, 446 },
448 { 447 {
449 .cmd = TCMU_CMD_ADDED_DEVICE_DONE, 448 .cmd = TCMU_CMD_ADDED_DEVICE_DONE,
450 .flags = GENL_ADMIN_PERM, 449 .flags = GENL_ADMIN_PERM,
451 .policy = tcmu_attr_policy,
452 .doit = tcmu_genl_add_dev_done, 450 .doit = tcmu_genl_add_dev_done,
453 }, 451 },
454 { 452 {
455 .cmd = TCMU_CMD_REMOVED_DEVICE_DONE, 453 .cmd = TCMU_CMD_REMOVED_DEVICE_DONE,
456 .flags = GENL_ADMIN_PERM, 454 .flags = GENL_ADMIN_PERM,
457 .policy = tcmu_attr_policy,
458 .doit = tcmu_genl_rm_dev_done, 455 .doit = tcmu_genl_rm_dev_done,
459 }, 456 },
460 { 457 {
461 .cmd = TCMU_CMD_RECONFIG_DEVICE_DONE, 458 .cmd = TCMU_CMD_RECONFIG_DEVICE_DONE,
462 .flags = GENL_ADMIN_PERM, 459 .flags = GENL_ADMIN_PERM,
463 .policy = tcmu_attr_policy,
464 .doit = tcmu_genl_reconfig_dev_done, 460 .doit = tcmu_genl_reconfig_dev_done,
465 }, 461 },
466}; 462};
@@ -472,6 +468,7 @@ static struct genl_family tcmu_genl_family __ro_after_init = {
472 .name = "TCM-USER", 468 .name = "TCM-USER",
473 .version = 2, 469 .version = 2,
474 .maxattr = TCMU_ATTR_MAX, 470 .maxattr = TCMU_ATTR_MAX,
471 .policy = tcmu_attr_policy,
475 .mcgrps = tcmu_mcgrps, 472 .mcgrps = tcmu_mcgrps,
476 .n_mcgrps = ARRAY_SIZE(tcmu_mcgrps), 473 .n_mcgrps = ARRAY_SIZE(tcmu_mcgrps),
477 .netnsok = true, 474 .netnsok = true,
diff --git a/include/linux/genl_magic_func.h b/include/linux/genl_magic_func.h
index 83f81ac53282..6cb82301d8e9 100644
--- a/include/linux/genl_magic_func.h
+++ b/include/linux/genl_magic_func.h
@@ -233,7 +233,6 @@ const char *CONCAT_(GENL_MAGIC_FAMILY, _genl_cmd_to_str)(__u8 cmd)
233{ \ 233{ \
234 handler \ 234 handler \
235 .cmd = op_name, \ 235 .cmd = op_name, \
236 .policy = CONCAT_(GENL_MAGIC_FAMILY, _tla_nl_policy), \
237}, 236},
238 237
239#define ZZZ_genl_ops CONCAT_(GENL_MAGIC_FAMILY, _genl_ops) 238#define ZZZ_genl_ops CONCAT_(GENL_MAGIC_FAMILY, _genl_ops)
@@ -290,7 +289,8 @@ static struct genl_family ZZZ_genl_family __ro_after_init = {
290#ifdef GENL_MAGIC_FAMILY_HDRSZ 289#ifdef GENL_MAGIC_FAMILY_HDRSZ
291 .hdrsize = NLA_ALIGN(GENL_MAGIC_FAMILY_HDRSZ), 290 .hdrsize = NLA_ALIGN(GENL_MAGIC_FAMILY_HDRSZ),
292#endif 291#endif
293 .maxattr = ARRAY_SIZE(drbd_tla_nl_policy)-1, 292 .maxattr = ARRAY_SIZE(CONCAT_(GENL_MAGIC_FAMILY, _tla_nl_policy))-1,
293 .policy = CONCAT_(GENL_MAGIC_FAMILY, _tla_nl_policy),
294 .ops = ZZZ_genl_ops, 294 .ops = ZZZ_genl_ops,
295 .n_ops = ARRAY_SIZE(ZZZ_genl_ops), 295 .n_ops = ARRAY_SIZE(ZZZ_genl_ops),
296 .mcgrps = ZZZ_genl_mcgrps, 296 .mcgrps = ZZZ_genl_mcgrps,
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index aa2e5888f18d..6850c7b1a3a6 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -26,6 +26,7 @@ struct genl_info;
26 * @name: name of family 26 * @name: name of family
27 * @version: protocol version 27 * @version: protocol version
28 * @maxattr: maximum number of attributes supported 28 * @maxattr: maximum number of attributes supported
29 * @policy: netlink policy
29 * @netnsok: set to true if the family can handle network 30 * @netnsok: set to true if the family can handle network
30 * namespaces and should be presented in all of them 31 * namespaces and should be presented in all of them
31 * @parallel_ops: operations can be called in parallel and aren't 32 * @parallel_ops: operations can be called in parallel and aren't
@@ -56,6 +57,7 @@ struct genl_family {
56 unsigned int maxattr; 57 unsigned int maxattr;
57 bool netnsok; 58 bool netnsok;
58 bool parallel_ops; 59 bool parallel_ops;
60 const struct nla_policy *policy;
59 int (*pre_doit)(const struct genl_ops *ops, 61 int (*pre_doit)(const struct genl_ops *ops,
60 struct sk_buff *skb, 62 struct sk_buff *skb,
61 struct genl_info *info); 63 struct genl_info *info);
@@ -124,14 +126,12 @@ static inline int genl_err_attr(struct genl_info *info, int err,
124 * @cmd: command identifier 126 * @cmd: command identifier
125 * @internal_flags: flags used by the family 127 * @internal_flags: flags used by the family
126 * @flags: flags 128 * @flags: flags
127 * @policy: attribute validation policy
128 * @doit: standard command callback 129 * @doit: standard command callback
129 * @start: start callback for dumps 130 * @start: start callback for dumps
130 * @dumpit: callback for dumpers 131 * @dumpit: callback for dumpers
131 * @done: completion callback for dumps 132 * @done: completion callback for dumps
132 */ 133 */
133struct genl_ops { 134struct genl_ops {
134 const struct nla_policy *policy;
135 int (*doit)(struct sk_buff *skb, 135 int (*doit)(struct sk_buff *skb,
136 struct genl_info *info); 136 struct genl_info *info);
137 int (*start)(struct netlink_callback *cb); 137 int (*start)(struct netlink_callback *cb);
diff --git a/kernel/taskstats.c b/kernel/taskstats.c
index 4e62a4a8fa91..1b942a7caf26 100644
--- a/kernel/taskstats.c
+++ b/kernel/taskstats.c
@@ -650,16 +650,37 @@ static const struct genl_ops taskstats_ops[] = {
650 { 650 {
651 .cmd = TASKSTATS_CMD_GET, 651 .cmd = TASKSTATS_CMD_GET,
652 .doit = taskstats_user_cmd, 652 .doit = taskstats_user_cmd,
653 .policy = taskstats_cmd_get_policy, 653 /* policy enforced later */
654 .flags = GENL_ADMIN_PERM, 654 .flags = GENL_ADMIN_PERM | GENL_CMD_CAP_HASPOL,
655 }, 655 },
656 { 656 {
657 .cmd = CGROUPSTATS_CMD_GET, 657 .cmd = CGROUPSTATS_CMD_GET,
658 .doit = cgroupstats_user_cmd, 658 .doit = cgroupstats_user_cmd,
659 .policy = cgroupstats_cmd_get_policy, 659 /* policy enforced later */
660 .flags = GENL_CMD_CAP_HASPOL,
660 }, 661 },
661}; 662};
662 663
664static int taskstats_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
665 struct genl_info *info)
666{
667 const struct nla_policy *policy = NULL;
668
669 switch (ops->cmd) {
670 case TASKSTATS_CMD_GET:
671 policy = taskstats_cmd_get_policy;
672 break;
673 case CGROUPSTATS_CMD_GET:
674 policy = cgroupstats_cmd_get_policy;
675 break;
676 default:
677 return -EINVAL;
678 }
679
680 return nlmsg_validate(info->nlhdr, GENL_HDRLEN, TASKSTATS_CMD_ATTR_MAX,
681 policy, info->extack);
682}
683
663static struct genl_family family __ro_after_init = { 684static struct genl_family family __ro_after_init = {
664 .name = TASKSTATS_GENL_NAME, 685 .name = TASKSTATS_GENL_NAME,
665 .version = TASKSTATS_GENL_VERSION, 686 .version = TASKSTATS_GENL_VERSION,
@@ -667,6 +688,7 @@ static struct genl_family family __ro_after_init = {
667 .module = THIS_MODULE, 688 .module = THIS_MODULE,
668 .ops = taskstats_ops, 689 .ops = taskstats_ops,
669 .n_ops = ARRAY_SIZE(taskstats_ops), 690 .n_ops = ARRAY_SIZE(taskstats_ops),
691 .pre_doit = taskstats_pre_doit,
670}; 692};
671 693
672/* Needed early in initialization */ 694/* Needed early in initialization */
diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c
index 67a58da2e6a0..d3033a3d2a63 100644
--- a/net/batman-adv/netlink.c
+++ b/net/batman-adv/netlink.c
@@ -1345,34 +1345,29 @@ static const struct genl_ops batadv_netlink_ops[] = {
1345 { 1345 {
1346 .cmd = BATADV_CMD_GET_MESH, 1346 .cmd = BATADV_CMD_GET_MESH,
1347 /* can be retrieved by unprivileged users */ 1347 /* can be retrieved by unprivileged users */
1348 .policy = batadv_netlink_policy,
1349 .doit = batadv_netlink_get_mesh, 1348 .doit = batadv_netlink_get_mesh,
1350 .internal_flags = BATADV_FLAG_NEED_MESH, 1349 .internal_flags = BATADV_FLAG_NEED_MESH,
1351 }, 1350 },
1352 { 1351 {
1353 .cmd = BATADV_CMD_TP_METER, 1352 .cmd = BATADV_CMD_TP_METER,
1354 .flags = GENL_ADMIN_PERM, 1353 .flags = GENL_ADMIN_PERM,
1355 .policy = batadv_netlink_policy,
1356 .doit = batadv_netlink_tp_meter_start, 1354 .doit = batadv_netlink_tp_meter_start,
1357 .internal_flags = BATADV_FLAG_NEED_MESH, 1355 .internal_flags = BATADV_FLAG_NEED_MESH,
1358 }, 1356 },
1359 { 1357 {
1360 .cmd = BATADV_CMD_TP_METER_CANCEL, 1358 .cmd = BATADV_CMD_TP_METER_CANCEL,
1361 .flags = GENL_ADMIN_PERM, 1359 .flags = GENL_ADMIN_PERM,
1362 .policy = batadv_netlink_policy,
1363 .doit = batadv_netlink_tp_meter_cancel, 1360 .doit = batadv_netlink_tp_meter_cancel,
1364 .internal_flags = BATADV_FLAG_NEED_MESH, 1361 .internal_flags = BATADV_FLAG_NEED_MESH,
1365 }, 1362 },
1366 { 1363 {
1367 .cmd = BATADV_CMD_GET_ROUTING_ALGOS, 1364 .cmd = BATADV_CMD_GET_ROUTING_ALGOS,
1368 .flags = GENL_ADMIN_PERM, 1365 .flags = GENL_ADMIN_PERM,
1369 .policy = batadv_netlink_policy,
1370 .dumpit = batadv_algo_dump, 1366 .dumpit = batadv_algo_dump,
1371 }, 1367 },
1372 { 1368 {
1373 .cmd = BATADV_CMD_GET_HARDIF, 1369 .cmd = BATADV_CMD_GET_HARDIF,
1374 /* can be retrieved by unprivileged users */ 1370 /* can be retrieved by unprivileged users */
1375 .policy = batadv_netlink_policy,
1376 .dumpit = batadv_netlink_dump_hardif, 1371 .dumpit = batadv_netlink_dump_hardif,
1377 .doit = batadv_netlink_get_hardif, 1372 .doit = batadv_netlink_get_hardif,
1378 .internal_flags = BATADV_FLAG_NEED_MESH | 1373 .internal_flags = BATADV_FLAG_NEED_MESH |
@@ -1381,68 +1376,57 @@ static const struct genl_ops batadv_netlink_ops[] = {
1381 { 1376 {
1382 .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL, 1377 .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL,
1383 .flags = GENL_ADMIN_PERM, 1378 .flags = GENL_ADMIN_PERM,
1384 .policy = batadv_netlink_policy,
1385 .dumpit = batadv_tt_local_dump, 1379 .dumpit = batadv_tt_local_dump,
1386 }, 1380 },
1387 { 1381 {
1388 .cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL, 1382 .cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL,
1389 .flags = GENL_ADMIN_PERM, 1383 .flags = GENL_ADMIN_PERM,
1390 .policy = batadv_netlink_policy,
1391 .dumpit = batadv_tt_global_dump, 1384 .dumpit = batadv_tt_global_dump,
1392 }, 1385 },
1393 { 1386 {
1394 .cmd = BATADV_CMD_GET_ORIGINATORS, 1387 .cmd = BATADV_CMD_GET_ORIGINATORS,
1395 .flags = GENL_ADMIN_PERM, 1388 .flags = GENL_ADMIN_PERM,
1396 .policy = batadv_netlink_policy,
1397 .dumpit = batadv_orig_dump, 1389 .dumpit = batadv_orig_dump,
1398 }, 1390 },
1399 { 1391 {
1400 .cmd = BATADV_CMD_GET_NEIGHBORS, 1392 .cmd = BATADV_CMD_GET_NEIGHBORS,
1401 .flags = GENL_ADMIN_PERM, 1393 .flags = GENL_ADMIN_PERM,
1402 .policy = batadv_netlink_policy,
1403 .dumpit = batadv_hardif_neigh_dump, 1394 .dumpit = batadv_hardif_neigh_dump,
1404 }, 1395 },
1405 { 1396 {
1406 .cmd = BATADV_CMD_GET_GATEWAYS, 1397 .cmd = BATADV_CMD_GET_GATEWAYS,
1407 .flags = GENL_ADMIN_PERM, 1398 .flags = GENL_ADMIN_PERM,
1408 .policy = batadv_netlink_policy,
1409 .dumpit = batadv_gw_dump, 1399 .dumpit = batadv_gw_dump,
1410 }, 1400 },
1411 { 1401 {
1412 .cmd = BATADV_CMD_GET_BLA_CLAIM, 1402 .cmd = BATADV_CMD_GET_BLA_CLAIM,
1413 .flags = GENL_ADMIN_PERM, 1403 .flags = GENL_ADMIN_PERM,
1414 .policy = batadv_netlink_policy,
1415 .dumpit = batadv_bla_claim_dump, 1404 .dumpit = batadv_bla_claim_dump,
1416 }, 1405 },
1417 { 1406 {
1418 .cmd = BATADV_CMD_GET_BLA_BACKBONE, 1407 .cmd = BATADV_CMD_GET_BLA_BACKBONE,
1419 .flags = GENL_ADMIN_PERM, 1408 .flags = GENL_ADMIN_PERM,
1420 .policy = batadv_netlink_policy,
1421 .dumpit = batadv_bla_backbone_dump, 1409 .dumpit = batadv_bla_backbone_dump,
1422 }, 1410 },
1423 { 1411 {
1424 .cmd = BATADV_CMD_GET_DAT_CACHE, 1412 .cmd = BATADV_CMD_GET_DAT_CACHE,
1425 .flags = GENL_ADMIN_PERM, 1413 .flags = GENL_ADMIN_PERM,
1426 .policy = batadv_netlink_policy,
1427 .dumpit = batadv_dat_cache_dump, 1414 .dumpit = batadv_dat_cache_dump,
1428 }, 1415 },
1429 { 1416 {
1430 .cmd = BATADV_CMD_GET_MCAST_FLAGS, 1417 .cmd = BATADV_CMD_GET_MCAST_FLAGS,
1431 .flags = GENL_ADMIN_PERM, 1418 .flags = GENL_ADMIN_PERM,
1432 .policy = batadv_netlink_policy,
1433 .dumpit = batadv_mcast_flags_dump, 1419 .dumpit = batadv_mcast_flags_dump,
1434 }, 1420 },
1435 { 1421 {
1436 .cmd = BATADV_CMD_SET_MESH, 1422 .cmd = BATADV_CMD_SET_MESH,
1437 .flags = GENL_ADMIN_PERM, 1423 .flags = GENL_ADMIN_PERM,
1438 .policy = batadv_netlink_policy,
1439 .doit = batadv_netlink_set_mesh, 1424 .doit = batadv_netlink_set_mesh,
1440 .internal_flags = BATADV_FLAG_NEED_MESH, 1425 .internal_flags = BATADV_FLAG_NEED_MESH,
1441 }, 1426 },
1442 { 1427 {
1443 .cmd = BATADV_CMD_SET_HARDIF, 1428 .cmd = BATADV_CMD_SET_HARDIF,
1444 .flags = GENL_ADMIN_PERM, 1429 .flags = GENL_ADMIN_PERM,
1445 .policy = batadv_netlink_policy,
1446 .doit = batadv_netlink_set_hardif, 1430 .doit = batadv_netlink_set_hardif,
1447 .internal_flags = BATADV_FLAG_NEED_MESH | 1431 .internal_flags = BATADV_FLAG_NEED_MESH |
1448 BATADV_FLAG_NEED_HARDIF, 1432 BATADV_FLAG_NEED_HARDIF,
@@ -1450,7 +1434,6 @@ static const struct genl_ops batadv_netlink_ops[] = {
1450 { 1434 {
1451 .cmd = BATADV_CMD_GET_VLAN, 1435 .cmd = BATADV_CMD_GET_VLAN,
1452 /* can be retrieved by unprivileged users */ 1436 /* can be retrieved by unprivileged users */
1453 .policy = batadv_netlink_policy,
1454 .doit = batadv_netlink_get_vlan, 1437 .doit = batadv_netlink_get_vlan,
1455 .internal_flags = BATADV_FLAG_NEED_MESH | 1438 .internal_flags = BATADV_FLAG_NEED_MESH |
1456 BATADV_FLAG_NEED_VLAN, 1439 BATADV_FLAG_NEED_VLAN,
@@ -1458,7 +1441,6 @@ static const struct genl_ops batadv_netlink_ops[] = {
1458 { 1441 {
1459 .cmd = BATADV_CMD_SET_VLAN, 1442 .cmd = BATADV_CMD_SET_VLAN,
1460 .flags = GENL_ADMIN_PERM, 1443 .flags = GENL_ADMIN_PERM,
1461 .policy = batadv_netlink_policy,
1462 .doit = batadv_netlink_set_vlan, 1444 .doit = batadv_netlink_set_vlan,
1463 .internal_flags = BATADV_FLAG_NEED_MESH | 1445 .internal_flags = BATADV_FLAG_NEED_MESH |
1464 BATADV_FLAG_NEED_VLAN, 1446 BATADV_FLAG_NEED_VLAN,
@@ -1470,6 +1452,7 @@ struct genl_family batadv_netlink_family __ro_after_init = {
1470 .name = BATADV_NL_NAME, 1452 .name = BATADV_NL_NAME,
1471 .version = 1, 1453 .version = 1,
1472 .maxattr = BATADV_ATTR_MAX, 1454 .maxattr = BATADV_ATTR_MAX,
1455 .policy = batadv_netlink_policy,
1473 .netnsok = true, 1456 .netnsok = true,
1474 .pre_doit = batadv_pre_doit, 1457 .pre_doit = batadv_pre_doit,
1475 .post_doit = batadv_post_doit, 1458 .post_doit = batadv_post_doit,
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 78e22cea4cc7..1a65cbf1ab05 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -3640,7 +3640,6 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
3640 struct netlink_callback *cb) 3640 struct netlink_callback *cb)
3641{ 3641{
3642 u64 ret_offset, start_offset, end_offset = 0; 3642 u64 ret_offset, start_offset, end_offset = 0;
3643 const struct genl_ops *ops = cb->data;
3644 struct devlink_region *region; 3643 struct devlink_region *region;
3645 struct nlattr *chunks_attr; 3644 struct nlattr *chunks_attr;
3646 const char *region_name; 3645 const char *region_name;
@@ -3657,7 +3656,8 @@ static int devlink_nl_cmd_region_read_dumpit(struct sk_buff *skb,
3657 return -ENOMEM; 3656 return -ENOMEM;
3658 3657
3659 err = nlmsg_parse(cb->nlh, GENL_HDRLEN + devlink_nl_family.hdrsize, 3658 err = nlmsg_parse(cb->nlh, GENL_HDRLEN + devlink_nl_family.hdrsize,
3660 attrs, DEVLINK_ATTR_MAX, ops->policy, cb->extack); 3659 attrs, DEVLINK_ATTR_MAX, devlink_nl_family.policy,
3660 cb->extack);
3661 if (err) 3661 if (err)
3662 goto out_free; 3662 goto out_free;
3663 3663
@@ -4923,7 +4923,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4923 .cmd = DEVLINK_CMD_GET, 4923 .cmd = DEVLINK_CMD_GET,
4924 .doit = devlink_nl_cmd_get_doit, 4924 .doit = devlink_nl_cmd_get_doit,
4925 .dumpit = devlink_nl_cmd_get_dumpit, 4925 .dumpit = devlink_nl_cmd_get_dumpit,
4926 .policy = devlink_nl_policy,
4927 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 4926 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
4928 /* can be retrieved by unprivileged users */ 4927 /* can be retrieved by unprivileged users */
4929 }, 4928 },
@@ -4931,21 +4930,18 @@ static const struct genl_ops devlink_nl_ops[] = {
4931 .cmd = DEVLINK_CMD_PORT_GET, 4930 .cmd = DEVLINK_CMD_PORT_GET,
4932 .doit = devlink_nl_cmd_port_get_doit, 4931 .doit = devlink_nl_cmd_port_get_doit,
4933 .dumpit = devlink_nl_cmd_port_get_dumpit, 4932 .dumpit = devlink_nl_cmd_port_get_dumpit,
4934 .policy = devlink_nl_policy,
4935 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 4933 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
4936 /* can be retrieved by unprivileged users */ 4934 /* can be retrieved by unprivileged users */
4937 }, 4935 },
4938 { 4936 {
4939 .cmd = DEVLINK_CMD_PORT_SET, 4937 .cmd = DEVLINK_CMD_PORT_SET,
4940 .doit = devlink_nl_cmd_port_set_doit, 4938 .doit = devlink_nl_cmd_port_set_doit,
4941 .policy = devlink_nl_policy,
4942 .flags = GENL_ADMIN_PERM, 4939 .flags = GENL_ADMIN_PERM,
4943 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 4940 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
4944 }, 4941 },
4945 { 4942 {
4946 .cmd = DEVLINK_CMD_PORT_SPLIT, 4943 .cmd = DEVLINK_CMD_PORT_SPLIT,
4947 .doit = devlink_nl_cmd_port_split_doit, 4944 .doit = devlink_nl_cmd_port_split_doit,
4948 .policy = devlink_nl_policy,
4949 .flags = GENL_ADMIN_PERM, 4945 .flags = GENL_ADMIN_PERM,
4950 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4946 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
4951 DEVLINK_NL_FLAG_NO_LOCK, 4947 DEVLINK_NL_FLAG_NO_LOCK,
@@ -4953,7 +4949,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4953 { 4949 {
4954 .cmd = DEVLINK_CMD_PORT_UNSPLIT, 4950 .cmd = DEVLINK_CMD_PORT_UNSPLIT,
4955 .doit = devlink_nl_cmd_port_unsplit_doit, 4951 .doit = devlink_nl_cmd_port_unsplit_doit,
4956 .policy = devlink_nl_policy,
4957 .flags = GENL_ADMIN_PERM, 4952 .flags = GENL_ADMIN_PERM,
4958 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4953 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
4959 DEVLINK_NL_FLAG_NO_LOCK, 4954 DEVLINK_NL_FLAG_NO_LOCK,
@@ -4962,7 +4957,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4962 .cmd = DEVLINK_CMD_SB_GET, 4957 .cmd = DEVLINK_CMD_SB_GET,
4963 .doit = devlink_nl_cmd_sb_get_doit, 4958 .doit = devlink_nl_cmd_sb_get_doit,
4964 .dumpit = devlink_nl_cmd_sb_get_dumpit, 4959 .dumpit = devlink_nl_cmd_sb_get_dumpit,
4965 .policy = devlink_nl_policy,
4966 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4960 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
4967 DEVLINK_NL_FLAG_NEED_SB, 4961 DEVLINK_NL_FLAG_NEED_SB,
4968 /* can be retrieved by unprivileged users */ 4962 /* can be retrieved by unprivileged users */
@@ -4971,7 +4965,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4971 .cmd = DEVLINK_CMD_SB_POOL_GET, 4965 .cmd = DEVLINK_CMD_SB_POOL_GET,
4972 .doit = devlink_nl_cmd_sb_pool_get_doit, 4966 .doit = devlink_nl_cmd_sb_pool_get_doit,
4973 .dumpit = devlink_nl_cmd_sb_pool_get_dumpit, 4967 .dumpit = devlink_nl_cmd_sb_pool_get_dumpit,
4974 .policy = devlink_nl_policy,
4975 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4968 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
4976 DEVLINK_NL_FLAG_NEED_SB, 4969 DEVLINK_NL_FLAG_NEED_SB,
4977 /* can be retrieved by unprivileged users */ 4970 /* can be retrieved by unprivileged users */
@@ -4979,7 +4972,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4979 { 4972 {
4980 .cmd = DEVLINK_CMD_SB_POOL_SET, 4973 .cmd = DEVLINK_CMD_SB_POOL_SET,
4981 .doit = devlink_nl_cmd_sb_pool_set_doit, 4974 .doit = devlink_nl_cmd_sb_pool_set_doit,
4982 .policy = devlink_nl_policy,
4983 .flags = GENL_ADMIN_PERM, 4975 .flags = GENL_ADMIN_PERM,
4984 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 4976 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
4985 DEVLINK_NL_FLAG_NEED_SB, 4977 DEVLINK_NL_FLAG_NEED_SB,
@@ -4988,7 +4980,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4988 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET, 4980 .cmd = DEVLINK_CMD_SB_PORT_POOL_GET,
4989 .doit = devlink_nl_cmd_sb_port_pool_get_doit, 4981 .doit = devlink_nl_cmd_sb_port_pool_get_doit,
4990 .dumpit = devlink_nl_cmd_sb_port_pool_get_dumpit, 4982 .dumpit = devlink_nl_cmd_sb_port_pool_get_dumpit,
4991 .policy = devlink_nl_policy,
4992 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 4983 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
4993 DEVLINK_NL_FLAG_NEED_SB, 4984 DEVLINK_NL_FLAG_NEED_SB,
4994 /* can be retrieved by unprivileged users */ 4985 /* can be retrieved by unprivileged users */
@@ -4996,7 +4987,6 @@ static const struct genl_ops devlink_nl_ops[] = {
4996 { 4987 {
4997 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET, 4988 .cmd = DEVLINK_CMD_SB_PORT_POOL_SET,
4998 .doit = devlink_nl_cmd_sb_port_pool_set_doit, 4989 .doit = devlink_nl_cmd_sb_port_pool_set_doit,
4999 .policy = devlink_nl_policy,
5000 .flags = GENL_ADMIN_PERM, 4990 .flags = GENL_ADMIN_PERM,
5001 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 4991 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
5002 DEVLINK_NL_FLAG_NEED_SB, 4992 DEVLINK_NL_FLAG_NEED_SB,
@@ -5005,7 +4995,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5005 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET, 4995 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_GET,
5006 .doit = devlink_nl_cmd_sb_tc_pool_bind_get_doit, 4996 .doit = devlink_nl_cmd_sb_tc_pool_bind_get_doit,
5007 .dumpit = devlink_nl_cmd_sb_tc_pool_bind_get_dumpit, 4997 .dumpit = devlink_nl_cmd_sb_tc_pool_bind_get_dumpit,
5008 .policy = devlink_nl_policy,
5009 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 4998 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
5010 DEVLINK_NL_FLAG_NEED_SB, 4999 DEVLINK_NL_FLAG_NEED_SB,
5011 /* can be retrieved by unprivileged users */ 5000 /* can be retrieved by unprivileged users */
@@ -5013,7 +5002,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5013 { 5002 {
5014 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET, 5003 .cmd = DEVLINK_CMD_SB_TC_POOL_BIND_SET,
5015 .doit = devlink_nl_cmd_sb_tc_pool_bind_set_doit, 5004 .doit = devlink_nl_cmd_sb_tc_pool_bind_set_doit,
5016 .policy = devlink_nl_policy,
5017 .flags = GENL_ADMIN_PERM, 5005 .flags = GENL_ADMIN_PERM,
5018 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT | 5006 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT |
5019 DEVLINK_NL_FLAG_NEED_SB, 5007 DEVLINK_NL_FLAG_NEED_SB,
@@ -5021,7 +5009,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5021 { 5009 {
5022 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT, 5010 .cmd = DEVLINK_CMD_SB_OCC_SNAPSHOT,
5023 .doit = devlink_nl_cmd_sb_occ_snapshot_doit, 5011 .doit = devlink_nl_cmd_sb_occ_snapshot_doit,
5024 .policy = devlink_nl_policy,
5025 .flags = GENL_ADMIN_PERM, 5012 .flags = GENL_ADMIN_PERM,
5026 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5013 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5027 DEVLINK_NL_FLAG_NEED_SB, 5014 DEVLINK_NL_FLAG_NEED_SB,
@@ -5029,7 +5016,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5029 { 5016 {
5030 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR, 5017 .cmd = DEVLINK_CMD_SB_OCC_MAX_CLEAR,
5031 .doit = devlink_nl_cmd_sb_occ_max_clear_doit, 5018 .doit = devlink_nl_cmd_sb_occ_max_clear_doit,
5032 .policy = devlink_nl_policy,
5033 .flags = GENL_ADMIN_PERM, 5019 .flags = GENL_ADMIN_PERM,
5034 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5020 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5035 DEVLINK_NL_FLAG_NEED_SB, 5021 DEVLINK_NL_FLAG_NEED_SB,
@@ -5037,14 +5023,12 @@ static const struct genl_ops devlink_nl_ops[] = {
5037 { 5023 {
5038 .cmd = DEVLINK_CMD_ESWITCH_GET, 5024 .cmd = DEVLINK_CMD_ESWITCH_GET,
5039 .doit = devlink_nl_cmd_eswitch_get_doit, 5025 .doit = devlink_nl_cmd_eswitch_get_doit,
5040 .policy = devlink_nl_policy,
5041 .flags = GENL_ADMIN_PERM, 5026 .flags = GENL_ADMIN_PERM,
5042 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5027 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5043 }, 5028 },
5044 { 5029 {
5045 .cmd = DEVLINK_CMD_ESWITCH_SET, 5030 .cmd = DEVLINK_CMD_ESWITCH_SET,
5046 .doit = devlink_nl_cmd_eswitch_set_doit, 5031 .doit = devlink_nl_cmd_eswitch_set_doit,
5047 .policy = devlink_nl_policy,
5048 .flags = GENL_ADMIN_PERM, 5032 .flags = GENL_ADMIN_PERM,
5049 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5033 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5050 DEVLINK_NL_FLAG_NO_LOCK, 5034 DEVLINK_NL_FLAG_NO_LOCK,
@@ -5052,49 +5036,42 @@ static const struct genl_ops devlink_nl_ops[] = {
5052 { 5036 {
5053 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET, 5037 .cmd = DEVLINK_CMD_DPIPE_TABLE_GET,
5054 .doit = devlink_nl_cmd_dpipe_table_get, 5038 .doit = devlink_nl_cmd_dpipe_table_get,
5055 .policy = devlink_nl_policy,
5056 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5039 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5057 /* can be retrieved by unprivileged users */ 5040 /* can be retrieved by unprivileged users */
5058 }, 5041 },
5059 { 5042 {
5060 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET, 5043 .cmd = DEVLINK_CMD_DPIPE_ENTRIES_GET,
5061 .doit = devlink_nl_cmd_dpipe_entries_get, 5044 .doit = devlink_nl_cmd_dpipe_entries_get,
5062 .policy = devlink_nl_policy,
5063 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5045 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5064 /* can be retrieved by unprivileged users */ 5046 /* can be retrieved by unprivileged users */
5065 }, 5047 },
5066 { 5048 {
5067 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET, 5049 .cmd = DEVLINK_CMD_DPIPE_HEADERS_GET,
5068 .doit = devlink_nl_cmd_dpipe_headers_get, 5050 .doit = devlink_nl_cmd_dpipe_headers_get,
5069 .policy = devlink_nl_policy,
5070 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5051 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5071 /* can be retrieved by unprivileged users */ 5052 /* can be retrieved by unprivileged users */
5072 }, 5053 },
5073 { 5054 {
5074 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET, 5055 .cmd = DEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET,
5075 .doit = devlink_nl_cmd_dpipe_table_counters_set, 5056 .doit = devlink_nl_cmd_dpipe_table_counters_set,
5076 .policy = devlink_nl_policy,
5077 .flags = GENL_ADMIN_PERM, 5057 .flags = GENL_ADMIN_PERM,
5078 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5058 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5079 }, 5059 },
5080 { 5060 {
5081 .cmd = DEVLINK_CMD_RESOURCE_SET, 5061 .cmd = DEVLINK_CMD_RESOURCE_SET,
5082 .doit = devlink_nl_cmd_resource_set, 5062 .doit = devlink_nl_cmd_resource_set,
5083 .policy = devlink_nl_policy,
5084 .flags = GENL_ADMIN_PERM, 5063 .flags = GENL_ADMIN_PERM,
5085 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5064 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5086 }, 5065 },
5087 { 5066 {
5088 .cmd = DEVLINK_CMD_RESOURCE_DUMP, 5067 .cmd = DEVLINK_CMD_RESOURCE_DUMP,
5089 .doit = devlink_nl_cmd_resource_dump, 5068 .doit = devlink_nl_cmd_resource_dump,
5090 .policy = devlink_nl_policy,
5091 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5069 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5092 /* can be retrieved by unprivileged users */ 5070 /* can be retrieved by unprivileged users */
5093 }, 5071 },
5094 { 5072 {
5095 .cmd = DEVLINK_CMD_RELOAD, 5073 .cmd = DEVLINK_CMD_RELOAD,
5096 .doit = devlink_nl_cmd_reload, 5074 .doit = devlink_nl_cmd_reload,
5097 .policy = devlink_nl_policy,
5098 .flags = GENL_ADMIN_PERM, 5075 .flags = GENL_ADMIN_PERM,
5099 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5076 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5100 DEVLINK_NL_FLAG_NO_LOCK, 5077 DEVLINK_NL_FLAG_NO_LOCK,
@@ -5103,14 +5080,12 @@ static const struct genl_ops devlink_nl_ops[] = {
5103 .cmd = DEVLINK_CMD_PARAM_GET, 5080 .cmd = DEVLINK_CMD_PARAM_GET,
5104 .doit = devlink_nl_cmd_param_get_doit, 5081 .doit = devlink_nl_cmd_param_get_doit,
5105 .dumpit = devlink_nl_cmd_param_get_dumpit, 5082 .dumpit = devlink_nl_cmd_param_get_dumpit,
5106 .policy = devlink_nl_policy,
5107 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5083 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5108 /* can be retrieved by unprivileged users */ 5084 /* can be retrieved by unprivileged users */
5109 }, 5085 },
5110 { 5086 {
5111 .cmd = DEVLINK_CMD_PARAM_SET, 5087 .cmd = DEVLINK_CMD_PARAM_SET,
5112 .doit = devlink_nl_cmd_param_set_doit, 5088 .doit = devlink_nl_cmd_param_set_doit,
5113 .policy = devlink_nl_policy,
5114 .flags = GENL_ADMIN_PERM, 5089 .flags = GENL_ADMIN_PERM,
5115 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5090 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5116 }, 5091 },
@@ -5118,14 +5093,12 @@ static const struct genl_ops devlink_nl_ops[] = {
5118 .cmd = DEVLINK_CMD_PORT_PARAM_GET, 5093 .cmd = DEVLINK_CMD_PORT_PARAM_GET,
5119 .doit = devlink_nl_cmd_port_param_get_doit, 5094 .doit = devlink_nl_cmd_port_param_get_doit,
5120 .dumpit = devlink_nl_cmd_port_param_get_dumpit, 5095 .dumpit = devlink_nl_cmd_port_param_get_dumpit,
5121 .policy = devlink_nl_policy,
5122 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 5096 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
5123 /* can be retrieved by unprivileged users */ 5097 /* can be retrieved by unprivileged users */
5124 }, 5098 },
5125 { 5099 {
5126 .cmd = DEVLINK_CMD_PORT_PARAM_SET, 5100 .cmd = DEVLINK_CMD_PORT_PARAM_SET,
5127 .doit = devlink_nl_cmd_port_param_set_doit, 5101 .doit = devlink_nl_cmd_port_param_set_doit,
5128 .policy = devlink_nl_policy,
5129 .flags = GENL_ADMIN_PERM, 5102 .flags = GENL_ADMIN_PERM,
5130 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT, 5103 .internal_flags = DEVLINK_NL_FLAG_NEED_PORT,
5131 }, 5104 },
@@ -5133,21 +5106,18 @@ static const struct genl_ops devlink_nl_ops[] = {
5133 .cmd = DEVLINK_CMD_REGION_GET, 5106 .cmd = DEVLINK_CMD_REGION_GET,
5134 .doit = devlink_nl_cmd_region_get_doit, 5107 .doit = devlink_nl_cmd_region_get_doit,
5135 .dumpit = devlink_nl_cmd_region_get_dumpit, 5108 .dumpit = devlink_nl_cmd_region_get_dumpit,
5136 .policy = devlink_nl_policy,
5137 .flags = GENL_ADMIN_PERM, 5109 .flags = GENL_ADMIN_PERM,
5138 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5110 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5139 }, 5111 },
5140 { 5112 {
5141 .cmd = DEVLINK_CMD_REGION_DEL, 5113 .cmd = DEVLINK_CMD_REGION_DEL,
5142 .doit = devlink_nl_cmd_region_del, 5114 .doit = devlink_nl_cmd_region_del,
5143 .policy = devlink_nl_policy,
5144 .flags = GENL_ADMIN_PERM, 5115 .flags = GENL_ADMIN_PERM,
5145 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5116 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5146 }, 5117 },
5147 { 5118 {
5148 .cmd = DEVLINK_CMD_REGION_READ, 5119 .cmd = DEVLINK_CMD_REGION_READ,
5149 .dumpit = devlink_nl_cmd_region_read_dumpit, 5120 .dumpit = devlink_nl_cmd_region_read_dumpit,
5150 .policy = devlink_nl_policy,
5151 .flags = GENL_ADMIN_PERM, 5121 .flags = GENL_ADMIN_PERM,
5152 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5122 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5153 }, 5123 },
@@ -5155,7 +5125,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5155 .cmd = DEVLINK_CMD_INFO_GET, 5125 .cmd = DEVLINK_CMD_INFO_GET,
5156 .doit = devlink_nl_cmd_info_get_doit, 5126 .doit = devlink_nl_cmd_info_get_doit,
5157 .dumpit = devlink_nl_cmd_info_get_dumpit, 5127 .dumpit = devlink_nl_cmd_info_get_dumpit,
5158 .policy = devlink_nl_policy,
5159 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5128 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5160 /* can be retrieved by unprivileged users */ 5129 /* can be retrieved by unprivileged users */
5161 }, 5130 },
@@ -5163,35 +5132,30 @@ static const struct genl_ops devlink_nl_ops[] = {
5163 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, 5132 .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
5164 .doit = devlink_nl_cmd_health_reporter_get_doit, 5133 .doit = devlink_nl_cmd_health_reporter_get_doit,
5165 .dumpit = devlink_nl_cmd_health_reporter_get_dumpit, 5134 .dumpit = devlink_nl_cmd_health_reporter_get_dumpit,
5166 .policy = devlink_nl_policy,
5167 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5135 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5168 /* can be retrieved by unprivileged users */ 5136 /* can be retrieved by unprivileged users */
5169 }, 5137 },
5170 { 5138 {
5171 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET, 5139 .cmd = DEVLINK_CMD_HEALTH_REPORTER_SET,
5172 .doit = devlink_nl_cmd_health_reporter_set_doit, 5140 .doit = devlink_nl_cmd_health_reporter_set_doit,
5173 .policy = devlink_nl_policy,
5174 .flags = GENL_ADMIN_PERM, 5141 .flags = GENL_ADMIN_PERM,
5175 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5142 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5176 }, 5143 },
5177 { 5144 {
5178 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER, 5145 .cmd = DEVLINK_CMD_HEALTH_REPORTER_RECOVER,
5179 .doit = devlink_nl_cmd_health_reporter_recover_doit, 5146 .doit = devlink_nl_cmd_health_reporter_recover_doit,
5180 .policy = devlink_nl_policy,
5181 .flags = GENL_ADMIN_PERM, 5147 .flags = GENL_ADMIN_PERM,
5182 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5148 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5183 }, 5149 },
5184 { 5150 {
5185 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 5151 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE,
5186 .doit = devlink_nl_cmd_health_reporter_diagnose_doit, 5152 .doit = devlink_nl_cmd_health_reporter_diagnose_doit,
5187 .policy = devlink_nl_policy,
5188 .flags = GENL_ADMIN_PERM, 5153 .flags = GENL_ADMIN_PERM,
5189 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5154 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5190 }, 5155 },
5191 { 5156 {
5192 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET, 5157 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
5193 .doit = devlink_nl_cmd_health_reporter_dump_get_doit, 5158 .doit = devlink_nl_cmd_health_reporter_dump_get_doit,
5194 .policy = devlink_nl_policy,
5195 .flags = GENL_ADMIN_PERM, 5159 .flags = GENL_ADMIN_PERM,
5196 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5160 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5197 DEVLINK_NL_FLAG_NO_LOCK, 5161 DEVLINK_NL_FLAG_NO_LOCK,
@@ -5199,7 +5163,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5199 { 5163 {
5200 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR, 5164 .cmd = DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
5201 .doit = devlink_nl_cmd_health_reporter_dump_clear_doit, 5165 .doit = devlink_nl_cmd_health_reporter_dump_clear_doit,
5202 .policy = devlink_nl_policy,
5203 .flags = GENL_ADMIN_PERM, 5166 .flags = GENL_ADMIN_PERM,
5204 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK | 5167 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK |
5205 DEVLINK_NL_FLAG_NO_LOCK, 5168 DEVLINK_NL_FLAG_NO_LOCK,
@@ -5207,7 +5170,6 @@ static const struct genl_ops devlink_nl_ops[] = {
5207 { 5170 {
5208 .cmd = DEVLINK_CMD_FLASH_UPDATE, 5171 .cmd = DEVLINK_CMD_FLASH_UPDATE,
5209 .doit = devlink_nl_cmd_flash_update, 5172 .doit = devlink_nl_cmd_flash_update,
5210 .policy = devlink_nl_policy,
5211 .flags = GENL_ADMIN_PERM, 5173 .flags = GENL_ADMIN_PERM,
5212 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK, 5174 .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK,
5213 }, 5175 },
@@ -5217,6 +5179,7 @@ static struct genl_family devlink_nl_family __ro_after_init = {
5217 .name = DEVLINK_GENL_NAME, 5179 .name = DEVLINK_GENL_NAME,
5218 .version = DEVLINK_GENL_VERSION, 5180 .version = DEVLINK_GENL_VERSION,
5219 .maxattr = DEVLINK_ATTR_MAX, 5181 .maxattr = DEVLINK_ATTR_MAX,
5182 .policy = devlink_nl_policy,
5220 .netnsok = true, 5183 .netnsok = true,
5221 .pre_doit = devlink_nl_pre_doit, 5184 .pre_doit = devlink_nl_pre_doit,
5222 .post_doit = devlink_nl_post_doit, 5185 .post_doit = devlink_nl_post_doit,
diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
index b9cce0fd5696..bcc04d3e724f 100644
--- a/net/hsr/hsr_netlink.c
+++ b/net/hsr/hsr_netlink.c
@@ -449,14 +449,12 @@ static const struct genl_ops hsr_ops[] = {
449 { 449 {
450 .cmd = HSR_C_GET_NODE_STATUS, 450 .cmd = HSR_C_GET_NODE_STATUS,
451 .flags = 0, 451 .flags = 0,
452 .policy = hsr_genl_policy,
453 .doit = hsr_get_node_status, 452 .doit = hsr_get_node_status,
454 .dumpit = NULL, 453 .dumpit = NULL,
455 }, 454 },
456 { 455 {
457 .cmd = HSR_C_GET_NODE_LIST, 456 .cmd = HSR_C_GET_NODE_LIST,
458 .flags = 0, 457 .flags = 0,
459 .policy = hsr_genl_policy,
460 .doit = hsr_get_node_list, 458 .doit = hsr_get_node_list,
461 .dumpit = NULL, 459 .dumpit = NULL,
462 }, 460 },
@@ -467,6 +465,7 @@ static struct genl_family hsr_genl_family __ro_after_init = {
467 .name = "HSR", 465 .name = "HSR",
468 .version = 1, 466 .version = 1,
469 .maxattr = HSR_A_MAX, 467 .maxattr = HSR_A_MAX,
468 .policy = hsr_genl_policy,
470 .module = THIS_MODULE, 469 .module = THIS_MODULE,
471 .ops = hsr_ops, 470 .ops = hsr_ops,
472 .n_ops = ARRAY_SIZE(hsr_ops), 471 .n_ops = ARRAY_SIZE(hsr_ops),
diff --git a/net/ieee802154/ieee802154.h b/net/ieee802154/ieee802154.h
index a5d7515b7f62..bc147bc8e36a 100644
--- a/net/ieee802154/ieee802154.h
+++ b/net/ieee802154/ieee802154.h
@@ -20,7 +20,6 @@ void ieee802154_nl_exit(void);
20#define IEEE802154_OP(_cmd, _func) \ 20#define IEEE802154_OP(_cmd, _func) \
21 { \ 21 { \
22 .cmd = _cmd, \ 22 .cmd = _cmd, \
23 .policy = ieee802154_policy, \
24 .doit = _func, \ 23 .doit = _func, \
25 .dumpit = NULL, \ 24 .dumpit = NULL, \
26 .flags = GENL_ADMIN_PERM, \ 25 .flags = GENL_ADMIN_PERM, \
@@ -29,7 +28,6 @@ void ieee802154_nl_exit(void);
29#define IEEE802154_DUMP(_cmd, _func, _dump) \ 28#define IEEE802154_DUMP(_cmd, _func, _dump) \
30 { \ 29 { \
31 .cmd = _cmd, \ 30 .cmd = _cmd, \
32 .policy = ieee802154_policy, \
33 .doit = _func, \ 31 .doit = _func, \
34 .dumpit = _dump, \ 32 .dumpit = _dump, \
35 } 33 }
diff --git a/net/ieee802154/netlink.c b/net/ieee802154/netlink.c
index 96636e3b7aa9..098d67439b6d 100644
--- a/net/ieee802154/netlink.c
+++ b/net/ieee802154/netlink.c
@@ -136,6 +136,7 @@ struct genl_family nl802154_family __ro_after_init = {
136 .name = IEEE802154_NL_NAME, 136 .name = IEEE802154_NL_NAME,
137 .version = 1, 137 .version = 1,
138 .maxattr = IEEE802154_ATTR_MAX, 138 .maxattr = IEEE802154_ATTR_MAX,
139 .policy = ieee802154_policy,
139 .module = THIS_MODULE, 140 .module = THIS_MODULE,
140 .ops = ieee802154_ops, 141 .ops = ieee802154_ops,
141 .n_ops = ARRAY_SIZE(ieee802154_ops), 142 .n_ops = ARRAY_SIZE(ieee802154_ops),
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c
index 99f6c254ea77..308370cfd668 100644
--- a/net/ieee802154/nl802154.c
+++ b/net/ieee802154/nl802154.c
@@ -2220,7 +2220,6 @@ static const struct genl_ops nl802154_ops[] = {
2220 .doit = nl802154_get_wpan_phy, 2220 .doit = nl802154_get_wpan_phy,
2221 .dumpit = nl802154_dump_wpan_phy, 2221 .dumpit = nl802154_dump_wpan_phy,
2222 .done = nl802154_dump_wpan_phy_done, 2222 .done = nl802154_dump_wpan_phy_done,
2223 .policy = nl802154_policy,
2224 /* can be retrieved by unprivileged users */ 2223 /* can be retrieved by unprivileged users */
2225 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2224 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2226 NL802154_FLAG_NEED_RTNL, 2225 NL802154_FLAG_NEED_RTNL,
@@ -2229,7 +2228,6 @@ static const struct genl_ops nl802154_ops[] = {
2229 .cmd = NL802154_CMD_GET_INTERFACE, 2228 .cmd = NL802154_CMD_GET_INTERFACE,
2230 .doit = nl802154_get_interface, 2229 .doit = nl802154_get_interface,
2231 .dumpit = nl802154_dump_interface, 2230 .dumpit = nl802154_dump_interface,
2232 .policy = nl802154_policy,
2233 /* can be retrieved by unprivileged users */ 2231 /* can be retrieved by unprivileged users */
2234 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | 2232 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV |
2235 NL802154_FLAG_NEED_RTNL, 2233 NL802154_FLAG_NEED_RTNL,
@@ -2237,7 +2235,6 @@ static const struct genl_ops nl802154_ops[] = {
2237 { 2235 {
2238 .cmd = NL802154_CMD_NEW_INTERFACE, 2236 .cmd = NL802154_CMD_NEW_INTERFACE,
2239 .doit = nl802154_new_interface, 2237 .doit = nl802154_new_interface,
2240 .policy = nl802154_policy,
2241 .flags = GENL_ADMIN_PERM, 2238 .flags = GENL_ADMIN_PERM,
2242 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2239 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2243 NL802154_FLAG_NEED_RTNL, 2240 NL802154_FLAG_NEED_RTNL,
@@ -2245,7 +2242,6 @@ static const struct genl_ops nl802154_ops[] = {
2245 { 2242 {
2246 .cmd = NL802154_CMD_DEL_INTERFACE, 2243 .cmd = NL802154_CMD_DEL_INTERFACE,
2247 .doit = nl802154_del_interface, 2244 .doit = nl802154_del_interface,
2248 .policy = nl802154_policy,
2249 .flags = GENL_ADMIN_PERM, 2245 .flags = GENL_ADMIN_PERM,
2250 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV | 2246 .internal_flags = NL802154_FLAG_NEED_WPAN_DEV |
2251 NL802154_FLAG_NEED_RTNL, 2247 NL802154_FLAG_NEED_RTNL,
@@ -2253,7 +2249,6 @@ static const struct genl_ops nl802154_ops[] = {
2253 { 2249 {
2254 .cmd = NL802154_CMD_SET_CHANNEL, 2250 .cmd = NL802154_CMD_SET_CHANNEL,
2255 .doit = nl802154_set_channel, 2251 .doit = nl802154_set_channel,
2256 .policy = nl802154_policy,
2257 .flags = GENL_ADMIN_PERM, 2252 .flags = GENL_ADMIN_PERM,
2258 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2253 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2259 NL802154_FLAG_NEED_RTNL, 2254 NL802154_FLAG_NEED_RTNL,
@@ -2261,7 +2256,6 @@ static const struct genl_ops nl802154_ops[] = {
2261 { 2256 {
2262 .cmd = NL802154_CMD_SET_CCA_MODE, 2257 .cmd = NL802154_CMD_SET_CCA_MODE,
2263 .doit = nl802154_set_cca_mode, 2258 .doit = nl802154_set_cca_mode,
2264 .policy = nl802154_policy,
2265 .flags = GENL_ADMIN_PERM, 2259 .flags = GENL_ADMIN_PERM,
2266 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2260 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2267 NL802154_FLAG_NEED_RTNL, 2261 NL802154_FLAG_NEED_RTNL,
@@ -2269,7 +2263,6 @@ static const struct genl_ops nl802154_ops[] = {
2269 { 2263 {
2270 .cmd = NL802154_CMD_SET_CCA_ED_LEVEL, 2264 .cmd = NL802154_CMD_SET_CCA_ED_LEVEL,
2271 .doit = nl802154_set_cca_ed_level, 2265 .doit = nl802154_set_cca_ed_level,
2272 .policy = nl802154_policy,
2273 .flags = GENL_ADMIN_PERM, 2266 .flags = GENL_ADMIN_PERM,
2274 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2267 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2275 NL802154_FLAG_NEED_RTNL, 2268 NL802154_FLAG_NEED_RTNL,
@@ -2277,7 +2270,6 @@ static const struct genl_ops nl802154_ops[] = {
2277 { 2270 {
2278 .cmd = NL802154_CMD_SET_TX_POWER, 2271 .cmd = NL802154_CMD_SET_TX_POWER,
2279 .doit = nl802154_set_tx_power, 2272 .doit = nl802154_set_tx_power,
2280 .policy = nl802154_policy,
2281 .flags = GENL_ADMIN_PERM, 2273 .flags = GENL_ADMIN_PERM,
2282 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2274 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2283 NL802154_FLAG_NEED_RTNL, 2275 NL802154_FLAG_NEED_RTNL,
@@ -2285,7 +2277,6 @@ static const struct genl_ops nl802154_ops[] = {
2285 { 2277 {
2286 .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS, 2278 .cmd = NL802154_CMD_SET_WPAN_PHY_NETNS,
2287 .doit = nl802154_wpan_phy_netns, 2279 .doit = nl802154_wpan_phy_netns,
2288 .policy = nl802154_policy,
2289 .flags = GENL_ADMIN_PERM, 2280 .flags = GENL_ADMIN_PERM,
2290 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY | 2281 .internal_flags = NL802154_FLAG_NEED_WPAN_PHY |
2291 NL802154_FLAG_NEED_RTNL, 2282 NL802154_FLAG_NEED_RTNL,
@@ -2293,7 +2284,6 @@ static const struct genl_ops nl802154_ops[] = {
2293 { 2284 {
2294 .cmd = NL802154_CMD_SET_PAN_ID, 2285 .cmd = NL802154_CMD_SET_PAN_ID,
2295 .doit = nl802154_set_pan_id, 2286 .doit = nl802154_set_pan_id,
2296 .policy = nl802154_policy,
2297 .flags = GENL_ADMIN_PERM, 2287 .flags = GENL_ADMIN_PERM,
2298 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2288 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2299 NL802154_FLAG_NEED_RTNL, 2289 NL802154_FLAG_NEED_RTNL,
@@ -2301,7 +2291,6 @@ static const struct genl_ops nl802154_ops[] = {
2301 { 2291 {
2302 .cmd = NL802154_CMD_SET_SHORT_ADDR, 2292 .cmd = NL802154_CMD_SET_SHORT_ADDR,
2303 .doit = nl802154_set_short_addr, 2293 .doit = nl802154_set_short_addr,
2304 .policy = nl802154_policy,
2305 .flags = GENL_ADMIN_PERM, 2294 .flags = GENL_ADMIN_PERM,
2306 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2295 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2307 NL802154_FLAG_NEED_RTNL, 2296 NL802154_FLAG_NEED_RTNL,
@@ -2309,7 +2298,6 @@ static const struct genl_ops nl802154_ops[] = {
2309 { 2298 {
2310 .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT, 2299 .cmd = NL802154_CMD_SET_BACKOFF_EXPONENT,
2311 .doit = nl802154_set_backoff_exponent, 2300 .doit = nl802154_set_backoff_exponent,
2312 .policy = nl802154_policy,
2313 .flags = GENL_ADMIN_PERM, 2301 .flags = GENL_ADMIN_PERM,
2314 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2302 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2315 NL802154_FLAG_NEED_RTNL, 2303 NL802154_FLAG_NEED_RTNL,
@@ -2317,7 +2305,6 @@ static const struct genl_ops nl802154_ops[] = {
2317 { 2305 {
2318 .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS, 2306 .cmd = NL802154_CMD_SET_MAX_CSMA_BACKOFFS,
2319 .doit = nl802154_set_max_csma_backoffs, 2307 .doit = nl802154_set_max_csma_backoffs,
2320 .policy = nl802154_policy,
2321 .flags = GENL_ADMIN_PERM, 2308 .flags = GENL_ADMIN_PERM,
2322 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2309 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2323 NL802154_FLAG_NEED_RTNL, 2310 NL802154_FLAG_NEED_RTNL,
@@ -2325,7 +2312,6 @@ static const struct genl_ops nl802154_ops[] = {
2325 { 2312 {
2326 .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES, 2313 .cmd = NL802154_CMD_SET_MAX_FRAME_RETRIES,
2327 .doit = nl802154_set_max_frame_retries, 2314 .doit = nl802154_set_max_frame_retries,
2328 .policy = nl802154_policy,
2329 .flags = GENL_ADMIN_PERM, 2315 .flags = GENL_ADMIN_PERM,
2330 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2316 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2331 NL802154_FLAG_NEED_RTNL, 2317 NL802154_FLAG_NEED_RTNL,
@@ -2333,7 +2319,6 @@ static const struct genl_ops nl802154_ops[] = {
2333 { 2319 {
2334 .cmd = NL802154_CMD_SET_LBT_MODE, 2320 .cmd = NL802154_CMD_SET_LBT_MODE,
2335 .doit = nl802154_set_lbt_mode, 2321 .doit = nl802154_set_lbt_mode,
2336 .policy = nl802154_policy,
2337 .flags = GENL_ADMIN_PERM, 2322 .flags = GENL_ADMIN_PERM,
2338 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2323 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2339 NL802154_FLAG_NEED_RTNL, 2324 NL802154_FLAG_NEED_RTNL,
@@ -2341,7 +2326,6 @@ static const struct genl_ops nl802154_ops[] = {
2341 { 2326 {
2342 .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT, 2327 .cmd = NL802154_CMD_SET_ACKREQ_DEFAULT,
2343 .doit = nl802154_set_ackreq_default, 2328 .doit = nl802154_set_ackreq_default,
2344 .policy = nl802154_policy,
2345 .flags = GENL_ADMIN_PERM, 2329 .flags = GENL_ADMIN_PERM,
2346 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2330 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2347 NL802154_FLAG_NEED_RTNL, 2331 NL802154_FLAG_NEED_RTNL,
@@ -2350,7 +2334,6 @@ static const struct genl_ops nl802154_ops[] = {
2350 { 2334 {
2351 .cmd = NL802154_CMD_SET_SEC_PARAMS, 2335 .cmd = NL802154_CMD_SET_SEC_PARAMS,
2352 .doit = nl802154_set_llsec_params, 2336 .doit = nl802154_set_llsec_params,
2353 .policy = nl802154_policy,
2354 .flags = GENL_ADMIN_PERM, 2337 .flags = GENL_ADMIN_PERM,
2355 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2338 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2356 NL802154_FLAG_NEED_RTNL, 2339 NL802154_FLAG_NEED_RTNL,
@@ -2359,7 +2342,6 @@ static const struct genl_ops nl802154_ops[] = {
2359 .cmd = NL802154_CMD_GET_SEC_KEY, 2342 .cmd = NL802154_CMD_GET_SEC_KEY,
2360 /* TODO .doit by matching key id? */ 2343 /* TODO .doit by matching key id? */
2361 .dumpit = nl802154_dump_llsec_key, 2344 .dumpit = nl802154_dump_llsec_key,
2362 .policy = nl802154_policy,
2363 .flags = GENL_ADMIN_PERM, 2345 .flags = GENL_ADMIN_PERM,
2364 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2346 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2365 NL802154_FLAG_NEED_RTNL, 2347 NL802154_FLAG_NEED_RTNL,
@@ -2367,7 +2349,6 @@ static const struct genl_ops nl802154_ops[] = {
2367 { 2349 {
2368 .cmd = NL802154_CMD_NEW_SEC_KEY, 2350 .cmd = NL802154_CMD_NEW_SEC_KEY,
2369 .doit = nl802154_add_llsec_key, 2351 .doit = nl802154_add_llsec_key,
2370 .policy = nl802154_policy,
2371 .flags = GENL_ADMIN_PERM, 2352 .flags = GENL_ADMIN_PERM,
2372 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2353 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2373 NL802154_FLAG_NEED_RTNL, 2354 NL802154_FLAG_NEED_RTNL,
@@ -2375,7 +2356,6 @@ static const struct genl_ops nl802154_ops[] = {
2375 { 2356 {
2376 .cmd = NL802154_CMD_DEL_SEC_KEY, 2357 .cmd = NL802154_CMD_DEL_SEC_KEY,
2377 .doit = nl802154_del_llsec_key, 2358 .doit = nl802154_del_llsec_key,
2378 .policy = nl802154_policy,
2379 .flags = GENL_ADMIN_PERM, 2359 .flags = GENL_ADMIN_PERM,
2380 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2360 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2381 NL802154_FLAG_NEED_RTNL, 2361 NL802154_FLAG_NEED_RTNL,
@@ -2385,7 +2365,6 @@ static const struct genl_ops nl802154_ops[] = {
2385 .cmd = NL802154_CMD_GET_SEC_DEV, 2365 .cmd = NL802154_CMD_GET_SEC_DEV,
2386 /* TODO .doit by matching extended_addr? */ 2366 /* TODO .doit by matching extended_addr? */
2387 .dumpit = nl802154_dump_llsec_dev, 2367 .dumpit = nl802154_dump_llsec_dev,
2388 .policy = nl802154_policy,
2389 .flags = GENL_ADMIN_PERM, 2368 .flags = GENL_ADMIN_PERM,
2390 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2369 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2391 NL802154_FLAG_NEED_RTNL, 2370 NL802154_FLAG_NEED_RTNL,
@@ -2393,7 +2372,6 @@ static const struct genl_ops nl802154_ops[] = {
2393 { 2372 {
2394 .cmd = NL802154_CMD_NEW_SEC_DEV, 2373 .cmd = NL802154_CMD_NEW_SEC_DEV,
2395 .doit = nl802154_add_llsec_dev, 2374 .doit = nl802154_add_llsec_dev,
2396 .policy = nl802154_policy,
2397 .flags = GENL_ADMIN_PERM, 2375 .flags = GENL_ADMIN_PERM,
2398 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2376 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2399 NL802154_FLAG_NEED_RTNL, 2377 NL802154_FLAG_NEED_RTNL,
@@ -2401,7 +2379,6 @@ static const struct genl_ops nl802154_ops[] = {
2401 { 2379 {
2402 .cmd = NL802154_CMD_DEL_SEC_DEV, 2380 .cmd = NL802154_CMD_DEL_SEC_DEV,
2403 .doit = nl802154_del_llsec_dev, 2381 .doit = nl802154_del_llsec_dev,
2404 .policy = nl802154_policy,
2405 .flags = GENL_ADMIN_PERM, 2382 .flags = GENL_ADMIN_PERM,
2406 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2383 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2407 NL802154_FLAG_NEED_RTNL, 2384 NL802154_FLAG_NEED_RTNL,
@@ -2411,7 +2388,6 @@ static const struct genl_ops nl802154_ops[] = {
2411 .cmd = NL802154_CMD_GET_SEC_DEVKEY, 2388 .cmd = NL802154_CMD_GET_SEC_DEVKEY,
2412 /* TODO doit by matching ??? */ 2389 /* TODO doit by matching ??? */
2413 .dumpit = nl802154_dump_llsec_devkey, 2390 .dumpit = nl802154_dump_llsec_devkey,
2414 .policy = nl802154_policy,
2415 .flags = GENL_ADMIN_PERM, 2391 .flags = GENL_ADMIN_PERM,
2416 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2392 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2417 NL802154_FLAG_NEED_RTNL, 2393 NL802154_FLAG_NEED_RTNL,
@@ -2419,7 +2395,6 @@ static const struct genl_ops nl802154_ops[] = {
2419 { 2395 {
2420 .cmd = NL802154_CMD_NEW_SEC_DEVKEY, 2396 .cmd = NL802154_CMD_NEW_SEC_DEVKEY,
2421 .doit = nl802154_add_llsec_devkey, 2397 .doit = nl802154_add_llsec_devkey,
2422 .policy = nl802154_policy,
2423 .flags = GENL_ADMIN_PERM, 2398 .flags = GENL_ADMIN_PERM,
2424 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2399 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2425 NL802154_FLAG_NEED_RTNL, 2400 NL802154_FLAG_NEED_RTNL,
@@ -2427,7 +2402,6 @@ static const struct genl_ops nl802154_ops[] = {
2427 { 2402 {
2428 .cmd = NL802154_CMD_DEL_SEC_DEVKEY, 2403 .cmd = NL802154_CMD_DEL_SEC_DEVKEY,
2429 .doit = nl802154_del_llsec_devkey, 2404 .doit = nl802154_del_llsec_devkey,
2430 .policy = nl802154_policy,
2431 .flags = GENL_ADMIN_PERM, 2405 .flags = GENL_ADMIN_PERM,
2432 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2406 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2433 NL802154_FLAG_NEED_RTNL, 2407 NL802154_FLAG_NEED_RTNL,
@@ -2436,7 +2410,6 @@ static const struct genl_ops nl802154_ops[] = {
2436 .cmd = NL802154_CMD_GET_SEC_LEVEL, 2410 .cmd = NL802154_CMD_GET_SEC_LEVEL,
2437 /* TODO .doit by matching frame_type? */ 2411 /* TODO .doit by matching frame_type? */
2438 .dumpit = nl802154_dump_llsec_seclevel, 2412 .dumpit = nl802154_dump_llsec_seclevel,
2439 .policy = nl802154_policy,
2440 .flags = GENL_ADMIN_PERM, 2413 .flags = GENL_ADMIN_PERM,
2441 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2414 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2442 NL802154_FLAG_NEED_RTNL, 2415 NL802154_FLAG_NEED_RTNL,
@@ -2444,7 +2417,6 @@ static const struct genl_ops nl802154_ops[] = {
2444 { 2417 {
2445 .cmd = NL802154_CMD_NEW_SEC_LEVEL, 2418 .cmd = NL802154_CMD_NEW_SEC_LEVEL,
2446 .doit = nl802154_add_llsec_seclevel, 2419 .doit = nl802154_add_llsec_seclevel,
2447 .policy = nl802154_policy,
2448 .flags = GENL_ADMIN_PERM, 2420 .flags = GENL_ADMIN_PERM,
2449 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2421 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2450 NL802154_FLAG_NEED_RTNL, 2422 NL802154_FLAG_NEED_RTNL,
@@ -2453,7 +2425,6 @@ static const struct genl_ops nl802154_ops[] = {
2453 .cmd = NL802154_CMD_DEL_SEC_LEVEL, 2425 .cmd = NL802154_CMD_DEL_SEC_LEVEL,
2454 /* TODO match frame_type only? */ 2426 /* TODO match frame_type only? */
2455 .doit = nl802154_del_llsec_seclevel, 2427 .doit = nl802154_del_llsec_seclevel,
2456 .policy = nl802154_policy,
2457 .flags = GENL_ADMIN_PERM, 2428 .flags = GENL_ADMIN_PERM,
2458 .internal_flags = NL802154_FLAG_NEED_NETDEV | 2429 .internal_flags = NL802154_FLAG_NEED_NETDEV |
2459 NL802154_FLAG_NEED_RTNL, 2430 NL802154_FLAG_NEED_RTNL,
@@ -2466,6 +2437,7 @@ static struct genl_family nl802154_fam __ro_after_init = {
2466 .hdrsize = 0, /* no private header */ 2437 .hdrsize = 0, /* no private header */
2467 .version = 1, /* no particular meaning now */ 2438 .version = 1, /* no particular meaning now */
2468 .maxattr = NL802154_ATTR_MAX, 2439 .maxattr = NL802154_ATTR_MAX,
2440 .policy = nl802154_policy,
2469 .netnsok = true, 2441 .netnsok = true,
2470 .pre_doit = nl802154_pre_doit, 2442 .pre_doit = nl802154_pre_doit,
2471 .post_doit = nl802154_post_doit, 2443 .post_doit = nl802154_post_doit,
diff --git a/net/ipv4/fou.c b/net/ipv4/fou.c
index 79e98e21cdd7..a23fbb52d265 100644
--- a/net/ipv4/fou.c
+++ b/net/ipv4/fou.c
@@ -808,20 +808,17 @@ static const struct genl_ops fou_nl_ops[] = {
808 { 808 {
809 .cmd = FOU_CMD_ADD, 809 .cmd = FOU_CMD_ADD,
810 .doit = fou_nl_cmd_add_port, 810 .doit = fou_nl_cmd_add_port,
811 .policy = fou_nl_policy,
812 .flags = GENL_ADMIN_PERM, 811 .flags = GENL_ADMIN_PERM,
813 }, 812 },
814 { 813 {
815 .cmd = FOU_CMD_DEL, 814 .cmd = FOU_CMD_DEL,
816 .doit = fou_nl_cmd_rm_port, 815 .doit = fou_nl_cmd_rm_port,
817 .policy = fou_nl_policy,
818 .flags = GENL_ADMIN_PERM, 816 .flags = GENL_ADMIN_PERM,
819 }, 817 },
820 { 818 {
821 .cmd = FOU_CMD_GET, 819 .cmd = FOU_CMD_GET,
822 .doit = fou_nl_cmd_get_port, 820 .doit = fou_nl_cmd_get_port,
823 .dumpit = fou_nl_dump, 821 .dumpit = fou_nl_dump,
824 .policy = fou_nl_policy,
825 }, 822 },
826}; 823};
827 824
@@ -830,6 +827,7 @@ static struct genl_family fou_nl_family __ro_after_init = {
830 .name = FOU_GENL_NAME, 827 .name = FOU_GENL_NAME,
831 .version = FOU_GENL_VERSION, 828 .version = FOU_GENL_VERSION,
832 .maxattr = FOU_ATTR_MAX, 829 .maxattr = FOU_ATTR_MAX,
830 .policy = fou_nl_policy,
833 .netnsok = true, 831 .netnsok = true,
834 .module = THIS_MODULE, 832 .module = THIS_MODULE,
835 .ops = fou_nl_ops, 833 .ops = fou_nl_ops,
diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index b467a7cabf40..4ccec4c705f7 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -953,12 +953,10 @@ static const struct genl_ops tcp_metrics_nl_ops[] = {
953 .cmd = TCP_METRICS_CMD_GET, 953 .cmd = TCP_METRICS_CMD_GET,
954 .doit = tcp_metrics_nl_cmd_get, 954 .doit = tcp_metrics_nl_cmd_get,
955 .dumpit = tcp_metrics_nl_dump, 955 .dumpit = tcp_metrics_nl_dump,
956 .policy = tcp_metrics_nl_policy,
957 }, 956 },
958 { 957 {
959 .cmd = TCP_METRICS_CMD_DEL, 958 .cmd = TCP_METRICS_CMD_DEL,
960 .doit = tcp_metrics_nl_cmd_del, 959 .doit = tcp_metrics_nl_cmd_del,
961 .policy = tcp_metrics_nl_policy,
962 .flags = GENL_ADMIN_PERM, 960 .flags = GENL_ADMIN_PERM,
963 }, 961 },
964}; 962};
@@ -968,6 +966,7 @@ static struct genl_family tcp_metrics_nl_family __ro_after_init = {
968 .name = TCP_METRICS_GENL_NAME, 966 .name = TCP_METRICS_GENL_NAME,
969 .version = TCP_METRICS_GENL_VERSION, 967 .version = TCP_METRICS_GENL_VERSION,
970 .maxattr = TCP_METRICS_ATTR_MAX, 968 .maxattr = TCP_METRICS_ATTR_MAX,
969 .policy = tcp_metrics_nl_policy,
971 .netnsok = true, 970 .netnsok = true,
972 .module = THIS_MODULE, 971 .module = THIS_MODULE,
973 .ops = tcp_metrics_nl_ops, 972 .ops = tcp_metrics_nl_ops,
diff --git a/net/ipv6/ila/ila_main.c b/net/ipv6/ila/ila_main.c
index 18fac76b9520..8d31a5066d0c 100644
--- a/net/ipv6/ila/ila_main.c
+++ b/net/ipv6/ila/ila_main.c
@@ -17,19 +17,16 @@ static const struct genl_ops ila_nl_ops[] = {
17 { 17 {
18 .cmd = ILA_CMD_ADD, 18 .cmd = ILA_CMD_ADD,
19 .doit = ila_xlat_nl_cmd_add_mapping, 19 .doit = ila_xlat_nl_cmd_add_mapping,
20 .policy = ila_nl_policy,
21 .flags = GENL_ADMIN_PERM, 20 .flags = GENL_ADMIN_PERM,
22 }, 21 },
23 { 22 {
24 .cmd = ILA_CMD_DEL, 23 .cmd = ILA_CMD_DEL,
25 .doit = ila_xlat_nl_cmd_del_mapping, 24 .doit = ila_xlat_nl_cmd_del_mapping,
26 .policy = ila_nl_policy,
27 .flags = GENL_ADMIN_PERM, 25 .flags = GENL_ADMIN_PERM,
28 }, 26 },
29 { 27 {
30 .cmd = ILA_CMD_FLUSH, 28 .cmd = ILA_CMD_FLUSH,
31 .doit = ila_xlat_nl_cmd_flush, 29 .doit = ila_xlat_nl_cmd_flush,
32 .policy = ila_nl_policy,
33 .flags = GENL_ADMIN_PERM, 30 .flags = GENL_ADMIN_PERM,
34 }, 31 },
35 { 32 {
@@ -38,7 +35,6 @@ static const struct genl_ops ila_nl_ops[] = {
38 .start = ila_xlat_nl_dump_start, 35 .start = ila_xlat_nl_dump_start,
39 .dumpit = ila_xlat_nl_dump, 36 .dumpit = ila_xlat_nl_dump,
40 .done = ila_xlat_nl_dump_done, 37 .done = ila_xlat_nl_dump_done,
41 .policy = ila_nl_policy,
42 }, 38 },
43}; 39};
44 40
@@ -49,6 +45,7 @@ struct genl_family ila_nl_family __ro_after_init = {
49 .name = ILA_GENL_NAME, 45 .name = ILA_GENL_NAME,
50 .version = ILA_GENL_VERSION, 46 .version = ILA_GENL_VERSION,
51 .maxattr = ILA_ATTR_MAX, 47 .maxattr = ILA_ATTR_MAX,
48 .policy = ila_nl_policy,
52 .netnsok = true, 49 .netnsok = true,
53 .parallel_ops = true, 50 .parallel_ops = true,
54 .module = THIS_MODULE, 51 .module = THIS_MODULE,
diff --git a/net/ipv6/seg6.c b/net/ipv6/seg6.c
index 9b2f272ca164..ceff773471e7 100644
--- a/net/ipv6/seg6.c
+++ b/net/ipv6/seg6.c
@@ -399,7 +399,6 @@ static const struct genl_ops seg6_genl_ops[] = {
399 { 399 {
400 .cmd = SEG6_CMD_SETHMAC, 400 .cmd = SEG6_CMD_SETHMAC,
401 .doit = seg6_genl_sethmac, 401 .doit = seg6_genl_sethmac,
402 .policy = seg6_genl_policy,
403 .flags = GENL_ADMIN_PERM, 402 .flags = GENL_ADMIN_PERM,
404 }, 403 },
405 { 404 {
@@ -407,19 +406,16 @@ static const struct genl_ops seg6_genl_ops[] = {
407 .start = seg6_genl_dumphmac_start, 406 .start = seg6_genl_dumphmac_start,
408 .dumpit = seg6_genl_dumphmac, 407 .dumpit = seg6_genl_dumphmac,
409 .done = seg6_genl_dumphmac_done, 408 .done = seg6_genl_dumphmac_done,
410 .policy = seg6_genl_policy,
411 .flags = GENL_ADMIN_PERM, 409 .flags = GENL_ADMIN_PERM,
412 }, 410 },
413 { 411 {
414 .cmd = SEG6_CMD_SET_TUNSRC, 412 .cmd = SEG6_CMD_SET_TUNSRC,
415 .doit = seg6_genl_set_tunsrc, 413 .doit = seg6_genl_set_tunsrc,
416 .policy = seg6_genl_policy,
417 .flags = GENL_ADMIN_PERM, 414 .flags = GENL_ADMIN_PERM,
418 }, 415 },
419 { 416 {
420 .cmd = SEG6_CMD_GET_TUNSRC, 417 .cmd = SEG6_CMD_GET_TUNSRC,
421 .doit = seg6_genl_get_tunsrc, 418 .doit = seg6_genl_get_tunsrc,
422 .policy = seg6_genl_policy,
423 .flags = GENL_ADMIN_PERM, 419 .flags = GENL_ADMIN_PERM,
424 }, 420 },
425}; 421};
@@ -429,6 +425,7 @@ static struct genl_family seg6_genl_family __ro_after_init = {
429 .name = SEG6_GENL_NAME, 425 .name = SEG6_GENL_NAME,
430 .version = SEG6_GENL_VERSION, 426 .version = SEG6_GENL_VERSION,
431 .maxattr = SEG6_ATTR_MAX, 427 .maxattr = SEG6_ATTR_MAX,
428 .policy = seg6_genl_policy,
432 .netnsok = true, 429 .netnsok = true,
433 .parallel_ops = true, 430 .parallel_ops = true,
434 .ops = seg6_genl_ops, 431 .ops = seg6_genl_ops,
diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
index edbd5d1fbcde..77595fcc9f75 100644
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -916,57 +916,48 @@ static const struct genl_ops l2tp_nl_ops[] = {
916 { 916 {
917 .cmd = L2TP_CMD_NOOP, 917 .cmd = L2TP_CMD_NOOP,
918 .doit = l2tp_nl_cmd_noop, 918 .doit = l2tp_nl_cmd_noop,
919 .policy = l2tp_nl_policy,
920 /* can be retrieved by unprivileged users */ 919 /* can be retrieved by unprivileged users */
921 }, 920 },
922 { 921 {
923 .cmd = L2TP_CMD_TUNNEL_CREATE, 922 .cmd = L2TP_CMD_TUNNEL_CREATE,
924 .doit = l2tp_nl_cmd_tunnel_create, 923 .doit = l2tp_nl_cmd_tunnel_create,
925 .policy = l2tp_nl_policy,
926 .flags = GENL_ADMIN_PERM, 924 .flags = GENL_ADMIN_PERM,
927 }, 925 },
928 { 926 {
929 .cmd = L2TP_CMD_TUNNEL_DELETE, 927 .cmd = L2TP_CMD_TUNNEL_DELETE,
930 .doit = l2tp_nl_cmd_tunnel_delete, 928 .doit = l2tp_nl_cmd_tunnel_delete,
931 .policy = l2tp_nl_policy,
932 .flags = GENL_ADMIN_PERM, 929 .flags = GENL_ADMIN_PERM,
933 }, 930 },
934 { 931 {
935 .cmd = L2TP_CMD_TUNNEL_MODIFY, 932 .cmd = L2TP_CMD_TUNNEL_MODIFY,
936 .doit = l2tp_nl_cmd_tunnel_modify, 933 .doit = l2tp_nl_cmd_tunnel_modify,
937 .policy = l2tp_nl_policy,
938 .flags = GENL_ADMIN_PERM, 934 .flags = GENL_ADMIN_PERM,
939 }, 935 },
940 { 936 {
941 .cmd = L2TP_CMD_TUNNEL_GET, 937 .cmd = L2TP_CMD_TUNNEL_GET,
942 .doit = l2tp_nl_cmd_tunnel_get, 938 .doit = l2tp_nl_cmd_tunnel_get,
943 .dumpit = l2tp_nl_cmd_tunnel_dump, 939 .dumpit = l2tp_nl_cmd_tunnel_dump,
944 .policy = l2tp_nl_policy,
945 .flags = GENL_ADMIN_PERM, 940 .flags = GENL_ADMIN_PERM,
946 }, 941 },
947 { 942 {
948 .cmd = L2TP_CMD_SESSION_CREATE, 943 .cmd = L2TP_CMD_SESSION_CREATE,
949 .doit = l2tp_nl_cmd_session_create, 944 .doit = l2tp_nl_cmd_session_create,
950 .policy = l2tp_nl_policy,
951 .flags = GENL_ADMIN_PERM, 945 .flags = GENL_ADMIN_PERM,
952 }, 946 },
953 { 947 {
954 .cmd = L2TP_CMD_SESSION_DELETE, 948 .cmd = L2TP_CMD_SESSION_DELETE,
955 .doit = l2tp_nl_cmd_session_delete, 949 .doit = l2tp_nl_cmd_session_delete,
956 .policy = l2tp_nl_policy,
957 .flags = GENL_ADMIN_PERM, 950 .flags = GENL_ADMIN_PERM,
958 }, 951 },
959 { 952 {
960 .cmd = L2TP_CMD_SESSION_MODIFY, 953 .cmd = L2TP_CMD_SESSION_MODIFY,
961 .doit = l2tp_nl_cmd_session_modify, 954 .doit = l2tp_nl_cmd_session_modify,
962 .policy = l2tp_nl_policy,
963 .flags = GENL_ADMIN_PERM, 955 .flags = GENL_ADMIN_PERM,
964 }, 956 },
965 { 957 {
966 .cmd = L2TP_CMD_SESSION_GET, 958 .cmd = L2TP_CMD_SESSION_GET,
967 .doit = l2tp_nl_cmd_session_get, 959 .doit = l2tp_nl_cmd_session_get,
968 .dumpit = l2tp_nl_cmd_session_dump, 960 .dumpit = l2tp_nl_cmd_session_dump,
969 .policy = l2tp_nl_policy,
970 .flags = GENL_ADMIN_PERM, 961 .flags = GENL_ADMIN_PERM,
971 }, 962 },
972}; 963};
@@ -976,6 +967,7 @@ static struct genl_family l2tp_nl_family __ro_after_init = {
976 .version = L2TP_GENL_VERSION, 967 .version = L2TP_GENL_VERSION,
977 .hdrsize = 0, 968 .hdrsize = 0,
978 .maxattr = L2TP_ATTR_MAX, 969 .maxattr = L2TP_ATTR_MAX,
970 .policy = l2tp_nl_policy,
979 .netnsok = true, 971 .netnsok = true,
980 .module = THIS_MODULE, 972 .module = THIS_MODULE,
981 .ops = l2tp_nl_ops, 973 .ops = l2tp_nl_ops,
diff --git a/net/ncsi/ncsi-netlink.c b/net/ncsi/ncsi-netlink.c
index bad17bba8ba7..367b2f6513e0 100644
--- a/net/ncsi/ncsi-netlink.c
+++ b/net/ncsi/ncsi-netlink.c
@@ -723,38 +723,32 @@ 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 .policy = ncsi_genl_policy,
727 .doit = ncsi_pkg_info_nl, 726 .doit = ncsi_pkg_info_nl,
728 .dumpit = ncsi_pkg_info_all_nl, 727 .dumpit = ncsi_pkg_info_all_nl,
729 .flags = 0, 728 .flags = 0,
730 }, 729 },
731 { 730 {
732 .cmd = NCSI_CMD_SET_INTERFACE, 731 .cmd = NCSI_CMD_SET_INTERFACE,
733 .policy = ncsi_genl_policy,
734 .doit = ncsi_set_interface_nl, 732 .doit = ncsi_set_interface_nl,
735 .flags = GENL_ADMIN_PERM, 733 .flags = GENL_ADMIN_PERM,
736 }, 734 },
737 { 735 {
738 .cmd = NCSI_CMD_CLEAR_INTERFACE, 736 .cmd = NCSI_CMD_CLEAR_INTERFACE,
739 .policy = ncsi_genl_policy,
740 .doit = ncsi_clear_interface_nl, 737 .doit = ncsi_clear_interface_nl,
741 .flags = GENL_ADMIN_PERM, 738 .flags = GENL_ADMIN_PERM,
742 }, 739 },
743 { 740 {
744 .cmd = NCSI_CMD_SEND_CMD, 741 .cmd = NCSI_CMD_SEND_CMD,
745 .policy = ncsi_genl_policy,
746 .doit = ncsi_send_cmd_nl, 742 .doit = ncsi_send_cmd_nl,
747 .flags = GENL_ADMIN_PERM, 743 .flags = GENL_ADMIN_PERM,
748 }, 744 },
749 { 745 {
750 .cmd = NCSI_CMD_SET_PACKAGE_MASK, 746 .cmd = NCSI_CMD_SET_PACKAGE_MASK,
751 .policy = ncsi_genl_policy,
752 .doit = ncsi_set_package_mask_nl, 747 .doit = ncsi_set_package_mask_nl,
753 .flags = GENL_ADMIN_PERM, 748 .flags = GENL_ADMIN_PERM,
754 }, 749 },
755 { 750 {
756 .cmd = NCSI_CMD_SET_CHANNEL_MASK, 751 .cmd = NCSI_CMD_SET_CHANNEL_MASK,
757 .policy = ncsi_genl_policy,
758 .doit = ncsi_set_channel_mask_nl, 752 .doit = ncsi_set_channel_mask_nl,
759 .flags = GENL_ADMIN_PERM, 753 .flags = GENL_ADMIN_PERM,
760 }, 754 },
@@ -764,6 +758,7 @@ static struct genl_family ncsi_genl_family __ro_after_init = {
764 .name = "NCSI", 758 .name = "NCSI",
765 .version = 0, 759 .version = 0,
766 .maxattr = NCSI_ATTR_MAX, 760 .maxattr = NCSI_ATTR_MAX,
761 .policy = ncsi_genl_policy,
767 .module = THIS_MODULE, 762 .module = THIS_MODULE,
768 .ops = ncsi_ops, 763 .ops = ncsi_ops,
769 .n_ops = ARRAY_SIZE(ncsi_ops), 764 .n_ops = ARRAY_SIZE(ncsi_ops),
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 053cd96b9c76..4b933669fd83 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -3775,19 +3775,16 @@ static const struct genl_ops ip_vs_genl_ops[] = {
3775 { 3775 {
3776 .cmd = IPVS_CMD_NEW_SERVICE, 3776 .cmd = IPVS_CMD_NEW_SERVICE,
3777 .flags = GENL_ADMIN_PERM, 3777 .flags = GENL_ADMIN_PERM,
3778 .policy = ip_vs_cmd_policy,
3779 .doit = ip_vs_genl_set_cmd, 3778 .doit = ip_vs_genl_set_cmd,
3780 }, 3779 },
3781 { 3780 {
3782 .cmd = IPVS_CMD_SET_SERVICE, 3781 .cmd = IPVS_CMD_SET_SERVICE,
3783 .flags = GENL_ADMIN_PERM, 3782 .flags = GENL_ADMIN_PERM,
3784 .policy = ip_vs_cmd_policy,
3785 .doit = ip_vs_genl_set_cmd, 3783 .doit = ip_vs_genl_set_cmd,
3786 }, 3784 },
3787 { 3785 {
3788 .cmd = IPVS_CMD_DEL_SERVICE, 3786 .cmd = IPVS_CMD_DEL_SERVICE,
3789 .flags = GENL_ADMIN_PERM, 3787 .flags = GENL_ADMIN_PERM,
3790 .policy = ip_vs_cmd_policy,
3791 .doit = ip_vs_genl_set_cmd, 3788 .doit = ip_vs_genl_set_cmd,
3792 }, 3789 },
3793 { 3790 {
@@ -3795,42 +3792,35 @@ static const struct genl_ops ip_vs_genl_ops[] = {
3795 .flags = GENL_ADMIN_PERM, 3792 .flags = GENL_ADMIN_PERM,
3796 .doit = ip_vs_genl_get_cmd, 3793 .doit = ip_vs_genl_get_cmd,
3797 .dumpit = ip_vs_genl_dump_services, 3794 .dumpit = ip_vs_genl_dump_services,
3798 .policy = ip_vs_cmd_policy,
3799 }, 3795 },
3800 { 3796 {
3801 .cmd = IPVS_CMD_NEW_DEST, 3797 .cmd = IPVS_CMD_NEW_DEST,
3802 .flags = GENL_ADMIN_PERM, 3798 .flags = GENL_ADMIN_PERM,
3803 .policy = ip_vs_cmd_policy,
3804 .doit = ip_vs_genl_set_cmd, 3799 .doit = ip_vs_genl_set_cmd,
3805 }, 3800 },
3806 { 3801 {
3807 .cmd = IPVS_CMD_SET_DEST, 3802 .cmd = IPVS_CMD_SET_DEST,
3808 .flags = GENL_ADMIN_PERM, 3803 .flags = GENL_ADMIN_PERM,
3809 .policy = ip_vs_cmd_policy,
3810 .doit = ip_vs_genl_set_cmd, 3804 .doit = ip_vs_genl_set_cmd,
3811 }, 3805 },
3812 { 3806 {
3813 .cmd = IPVS_CMD_DEL_DEST, 3807 .cmd = IPVS_CMD_DEL_DEST,
3814 .flags = GENL_ADMIN_PERM, 3808 .flags = GENL_ADMIN_PERM,
3815 .policy = ip_vs_cmd_policy,
3816 .doit = ip_vs_genl_set_cmd, 3809 .doit = ip_vs_genl_set_cmd,
3817 }, 3810 },
3818 { 3811 {
3819 .cmd = IPVS_CMD_GET_DEST, 3812 .cmd = IPVS_CMD_GET_DEST,
3820 .flags = GENL_ADMIN_PERM, 3813 .flags = GENL_ADMIN_PERM,
3821 .policy = ip_vs_cmd_policy,
3822 .dumpit = ip_vs_genl_dump_dests, 3814 .dumpit = ip_vs_genl_dump_dests,
3823 }, 3815 },
3824 { 3816 {
3825 .cmd = IPVS_CMD_NEW_DAEMON, 3817 .cmd = IPVS_CMD_NEW_DAEMON,
3826 .flags = GENL_ADMIN_PERM, 3818 .flags = GENL_ADMIN_PERM,
3827 .policy = ip_vs_cmd_policy,
3828 .doit = ip_vs_genl_set_daemon, 3819 .doit = ip_vs_genl_set_daemon,
3829 }, 3820 },
3830 { 3821 {
3831 .cmd = IPVS_CMD_DEL_DAEMON, 3822 .cmd = IPVS_CMD_DEL_DAEMON,
3832 .flags = GENL_ADMIN_PERM, 3823 .flags = GENL_ADMIN_PERM,
3833 .policy = ip_vs_cmd_policy,
3834 .doit = ip_vs_genl_set_daemon, 3824 .doit = ip_vs_genl_set_daemon,
3835 }, 3825 },
3836 { 3826 {
@@ -3841,7 +3831,6 @@ static const struct genl_ops ip_vs_genl_ops[] = {
3841 { 3831 {
3842 .cmd = IPVS_CMD_SET_CONFIG, 3832 .cmd = IPVS_CMD_SET_CONFIG,
3843 .flags = GENL_ADMIN_PERM, 3833 .flags = GENL_ADMIN_PERM,
3844 .policy = ip_vs_cmd_policy,
3845 .doit = ip_vs_genl_set_cmd, 3834 .doit = ip_vs_genl_set_cmd,
3846 }, 3835 },
3847 { 3836 {
@@ -3857,7 +3846,6 @@ static const struct genl_ops ip_vs_genl_ops[] = {
3857 { 3846 {
3858 .cmd = IPVS_CMD_ZERO, 3847 .cmd = IPVS_CMD_ZERO,
3859 .flags = GENL_ADMIN_PERM, 3848 .flags = GENL_ADMIN_PERM,
3860 .policy = ip_vs_cmd_policy,
3861 .doit = ip_vs_genl_set_cmd, 3849 .doit = ip_vs_genl_set_cmd,
3862 }, 3850 },
3863 { 3851 {
@@ -3872,6 +3860,7 @@ static struct genl_family ip_vs_genl_family __ro_after_init = {
3872 .name = IPVS_GENL_NAME, 3860 .name = IPVS_GENL_NAME,
3873 .version = IPVS_GENL_VERSION, 3861 .version = IPVS_GENL_VERSION,
3874 .maxattr = IPVS_CMD_ATTR_MAX, 3862 .maxattr = IPVS_CMD_ATTR_MAX,
3863 .policy = ip_vs_cmd_policy,
3875 .netnsok = true, /* Make ipvsadm to work on netns */ 3864 .netnsok = true, /* Make ipvsadm to work on netns */
3876 .module = THIS_MODULE, 3865 .module = THIS_MODULE,
3877 .ops = ip_vs_genl_ops, 3866 .ops = ip_vs_genl_ops,
diff --git a/net/netlabel/netlabel_calipso.c b/net/netlabel/netlabel_calipso.c
index 4d748975117d..80184513b2b2 100644
--- a/net/netlabel/netlabel_calipso.c
+++ b/net/netlabel/netlabel_calipso.c
@@ -322,28 +322,24 @@ static const struct genl_ops netlbl_calipso_ops[] = {
322 { 322 {
323 .cmd = NLBL_CALIPSO_C_ADD, 323 .cmd = NLBL_CALIPSO_C_ADD,
324 .flags = GENL_ADMIN_PERM, 324 .flags = GENL_ADMIN_PERM,
325 .policy = calipso_genl_policy,
326 .doit = netlbl_calipso_add, 325 .doit = netlbl_calipso_add,
327 .dumpit = NULL, 326 .dumpit = NULL,
328 }, 327 },
329 { 328 {
330 .cmd = NLBL_CALIPSO_C_REMOVE, 329 .cmd = NLBL_CALIPSO_C_REMOVE,
331 .flags = GENL_ADMIN_PERM, 330 .flags = GENL_ADMIN_PERM,
332 .policy = calipso_genl_policy,
333 .doit = netlbl_calipso_remove, 331 .doit = netlbl_calipso_remove,
334 .dumpit = NULL, 332 .dumpit = NULL,
335 }, 333 },
336 { 334 {
337 .cmd = NLBL_CALIPSO_C_LIST, 335 .cmd = NLBL_CALIPSO_C_LIST,
338 .flags = 0, 336 .flags = 0,
339 .policy = calipso_genl_policy,
340 .doit = netlbl_calipso_list, 337 .doit = netlbl_calipso_list,
341 .dumpit = NULL, 338 .dumpit = NULL,
342 }, 339 },
343 { 340 {
344 .cmd = NLBL_CALIPSO_C_LISTALL, 341 .cmd = NLBL_CALIPSO_C_LISTALL,
345 .flags = 0, 342 .flags = 0,
346 .policy = calipso_genl_policy,
347 .doit = NULL, 343 .doit = NULL,
348 .dumpit = netlbl_calipso_listall, 344 .dumpit = netlbl_calipso_listall,
349 }, 345 },
@@ -354,6 +350,7 @@ static struct genl_family netlbl_calipso_gnl_family __ro_after_init = {
354 .name = NETLBL_NLTYPE_CALIPSO_NAME, 350 .name = NETLBL_NLTYPE_CALIPSO_NAME,
355 .version = NETLBL_PROTO_VERSION, 351 .version = NETLBL_PROTO_VERSION,
356 .maxattr = NLBL_CALIPSO_A_MAX, 352 .maxattr = NLBL_CALIPSO_A_MAX,
353 .policy = calipso_genl_policy,
357 .module = THIS_MODULE, 354 .module = THIS_MODULE,
358 .ops = netlbl_calipso_ops, 355 .ops = netlbl_calipso_ops,
359 .n_ops = ARRAY_SIZE(netlbl_calipso_ops), 356 .n_ops = ARRAY_SIZE(netlbl_calipso_ops),
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c
index 9aacf2da3d98..ba7800f94ccc 100644
--- a/net/netlabel/netlabel_cipso_v4.c
+++ b/net/netlabel/netlabel_cipso_v4.c
@@ -734,28 +734,24 @@ static const struct genl_ops netlbl_cipsov4_ops[] = {
734 { 734 {
735 .cmd = NLBL_CIPSOV4_C_ADD, 735 .cmd = NLBL_CIPSOV4_C_ADD,
736 .flags = GENL_ADMIN_PERM, 736 .flags = GENL_ADMIN_PERM,
737 .policy = netlbl_cipsov4_genl_policy,
738 .doit = netlbl_cipsov4_add, 737 .doit = netlbl_cipsov4_add,
739 .dumpit = NULL, 738 .dumpit = NULL,
740 }, 739 },
741 { 740 {
742 .cmd = NLBL_CIPSOV4_C_REMOVE, 741 .cmd = NLBL_CIPSOV4_C_REMOVE,
743 .flags = GENL_ADMIN_PERM, 742 .flags = GENL_ADMIN_PERM,
744 .policy = netlbl_cipsov4_genl_policy,
745 .doit = netlbl_cipsov4_remove, 743 .doit = netlbl_cipsov4_remove,
746 .dumpit = NULL, 744 .dumpit = NULL,
747 }, 745 },
748 { 746 {
749 .cmd = NLBL_CIPSOV4_C_LIST, 747 .cmd = NLBL_CIPSOV4_C_LIST,
750 .flags = 0, 748 .flags = 0,
751 .policy = netlbl_cipsov4_genl_policy,
752 .doit = netlbl_cipsov4_list, 749 .doit = netlbl_cipsov4_list,
753 .dumpit = NULL, 750 .dumpit = NULL,
754 }, 751 },
755 { 752 {
756 .cmd = NLBL_CIPSOV4_C_LISTALL, 753 .cmd = NLBL_CIPSOV4_C_LISTALL,
757 .flags = 0, 754 .flags = 0,
758 .policy = netlbl_cipsov4_genl_policy,
759 .doit = NULL, 755 .doit = NULL,
760 .dumpit = netlbl_cipsov4_listall, 756 .dumpit = netlbl_cipsov4_listall,
761 }, 757 },
@@ -766,6 +762,7 @@ static struct genl_family netlbl_cipsov4_gnl_family __ro_after_init = {
766 .name = NETLBL_NLTYPE_CIPSOV4_NAME, 762 .name = NETLBL_NLTYPE_CIPSOV4_NAME,
767 .version = NETLBL_PROTO_VERSION, 763 .version = NETLBL_PROTO_VERSION,
768 .maxattr = NLBL_CIPSOV4_A_MAX, 764 .maxattr = NLBL_CIPSOV4_A_MAX,
765 .policy = netlbl_cipsov4_genl_policy,
769 .module = THIS_MODULE, 766 .module = THIS_MODULE,
770 .ops = netlbl_cipsov4_ops, 767 .ops = netlbl_cipsov4_ops,
771 .n_ops = ARRAY_SIZE(netlbl_cipsov4_ops), 768 .n_ops = ARRAY_SIZE(netlbl_cipsov4_ops),
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index 21e0095b1d14..a16eacfb2236 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -773,56 +773,48 @@ static const struct genl_ops netlbl_mgmt_genl_ops[] = {
773 { 773 {
774 .cmd = NLBL_MGMT_C_ADD, 774 .cmd = NLBL_MGMT_C_ADD,
775 .flags = GENL_ADMIN_PERM, 775 .flags = GENL_ADMIN_PERM,
776 .policy = netlbl_mgmt_genl_policy,
777 .doit = netlbl_mgmt_add, 776 .doit = netlbl_mgmt_add,
778 .dumpit = NULL, 777 .dumpit = NULL,
779 }, 778 },
780 { 779 {
781 .cmd = NLBL_MGMT_C_REMOVE, 780 .cmd = NLBL_MGMT_C_REMOVE,
782 .flags = GENL_ADMIN_PERM, 781 .flags = GENL_ADMIN_PERM,
783 .policy = netlbl_mgmt_genl_policy,
784 .doit = netlbl_mgmt_remove, 782 .doit = netlbl_mgmt_remove,
785 .dumpit = NULL, 783 .dumpit = NULL,
786 }, 784 },
787 { 785 {
788 .cmd = NLBL_MGMT_C_LISTALL, 786 .cmd = NLBL_MGMT_C_LISTALL,
789 .flags = 0, 787 .flags = 0,
790 .policy = netlbl_mgmt_genl_policy,
791 .doit = NULL, 788 .doit = NULL,
792 .dumpit = netlbl_mgmt_listall, 789 .dumpit = netlbl_mgmt_listall,
793 }, 790 },
794 { 791 {
795 .cmd = NLBL_MGMT_C_ADDDEF, 792 .cmd = NLBL_MGMT_C_ADDDEF,
796 .flags = GENL_ADMIN_PERM, 793 .flags = GENL_ADMIN_PERM,
797 .policy = netlbl_mgmt_genl_policy,
798 .doit = netlbl_mgmt_adddef, 794 .doit = netlbl_mgmt_adddef,
799 .dumpit = NULL, 795 .dumpit = NULL,
800 }, 796 },
801 { 797 {
802 .cmd = NLBL_MGMT_C_REMOVEDEF, 798 .cmd = NLBL_MGMT_C_REMOVEDEF,
803 .flags = GENL_ADMIN_PERM, 799 .flags = GENL_ADMIN_PERM,
804 .policy = netlbl_mgmt_genl_policy,
805 .doit = netlbl_mgmt_removedef, 800 .doit = netlbl_mgmt_removedef,
806 .dumpit = NULL, 801 .dumpit = NULL,
807 }, 802 },
808 { 803 {
809 .cmd = NLBL_MGMT_C_LISTDEF, 804 .cmd = NLBL_MGMT_C_LISTDEF,
810 .flags = 0, 805 .flags = 0,
811 .policy = netlbl_mgmt_genl_policy,
812 .doit = netlbl_mgmt_listdef, 806 .doit = netlbl_mgmt_listdef,
813 .dumpit = NULL, 807 .dumpit = NULL,
814 }, 808 },
815 { 809 {
816 .cmd = NLBL_MGMT_C_PROTOCOLS, 810 .cmd = NLBL_MGMT_C_PROTOCOLS,
817 .flags = 0, 811 .flags = 0,
818 .policy = netlbl_mgmt_genl_policy,
819 .doit = NULL, 812 .doit = NULL,
820 .dumpit = netlbl_mgmt_protocols, 813 .dumpit = netlbl_mgmt_protocols,
821 }, 814 },
822 { 815 {
823 .cmd = NLBL_MGMT_C_VERSION, 816 .cmd = NLBL_MGMT_C_VERSION,
824 .flags = 0, 817 .flags = 0,
825 .policy = netlbl_mgmt_genl_policy,
826 .doit = netlbl_mgmt_version, 818 .doit = netlbl_mgmt_version,
827 .dumpit = NULL, 819 .dumpit = NULL,
828 }, 820 },
@@ -833,6 +825,7 @@ static struct genl_family netlbl_mgmt_gnl_family __ro_after_init = {
833 .name = NETLBL_NLTYPE_MGMT_NAME, 825 .name = NETLBL_NLTYPE_MGMT_NAME,
834 .version = NETLBL_PROTO_VERSION, 826 .version = NETLBL_PROTO_VERSION,
835 .maxattr = NLBL_MGMT_A_MAX, 827 .maxattr = NLBL_MGMT_A_MAX,
828 .policy = netlbl_mgmt_genl_policy,
836 .module = THIS_MODULE, 829 .module = THIS_MODULE,
837 .ops = netlbl_mgmt_genl_ops, 830 .ops = netlbl_mgmt_genl_ops,
838 .n_ops = ARRAY_SIZE(netlbl_mgmt_genl_ops), 831 .n_ops = ARRAY_SIZE(netlbl_mgmt_genl_ops),
diff --git a/net/netlabel/netlabel_unlabeled.c b/net/netlabel/netlabel_unlabeled.c
index c92894c3e40a..6b1b6c2b5141 100644
--- a/net/netlabel/netlabel_unlabeled.c
+++ b/net/netlabel/netlabel_unlabeled.c
@@ -1318,56 +1318,48 @@ static const struct genl_ops netlbl_unlabel_genl_ops[] = {
1318 { 1318 {
1319 .cmd = NLBL_UNLABEL_C_STATICADD, 1319 .cmd = NLBL_UNLABEL_C_STATICADD,
1320 .flags = GENL_ADMIN_PERM, 1320 .flags = GENL_ADMIN_PERM,
1321 .policy = netlbl_unlabel_genl_policy,
1322 .doit = netlbl_unlabel_staticadd, 1321 .doit = netlbl_unlabel_staticadd,
1323 .dumpit = NULL, 1322 .dumpit = NULL,
1324 }, 1323 },
1325 { 1324 {
1326 .cmd = NLBL_UNLABEL_C_STATICREMOVE, 1325 .cmd = NLBL_UNLABEL_C_STATICREMOVE,
1327 .flags = GENL_ADMIN_PERM, 1326 .flags = GENL_ADMIN_PERM,
1328 .policy = netlbl_unlabel_genl_policy,
1329 .doit = netlbl_unlabel_staticremove, 1327 .doit = netlbl_unlabel_staticremove,
1330 .dumpit = NULL, 1328 .dumpit = NULL,
1331 }, 1329 },
1332 { 1330 {
1333 .cmd = NLBL_UNLABEL_C_STATICLIST, 1331 .cmd = NLBL_UNLABEL_C_STATICLIST,
1334 .flags = 0, 1332 .flags = 0,
1335 .policy = netlbl_unlabel_genl_policy,
1336 .doit = NULL, 1333 .doit = NULL,
1337 .dumpit = netlbl_unlabel_staticlist, 1334 .dumpit = netlbl_unlabel_staticlist,
1338 }, 1335 },
1339 { 1336 {
1340 .cmd = NLBL_UNLABEL_C_STATICADDDEF, 1337 .cmd = NLBL_UNLABEL_C_STATICADDDEF,
1341 .flags = GENL_ADMIN_PERM, 1338 .flags = GENL_ADMIN_PERM,
1342 .policy = netlbl_unlabel_genl_policy,
1343 .doit = netlbl_unlabel_staticadddef, 1339 .doit = netlbl_unlabel_staticadddef,
1344 .dumpit = NULL, 1340 .dumpit = NULL,
1345 }, 1341 },
1346 { 1342 {
1347 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF, 1343 .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF,
1348 .flags = GENL_ADMIN_PERM, 1344 .flags = GENL_ADMIN_PERM,
1349 .policy = netlbl_unlabel_genl_policy,
1350 .doit = netlbl_unlabel_staticremovedef, 1345 .doit = netlbl_unlabel_staticremovedef,
1351 .dumpit = NULL, 1346 .dumpit = NULL,
1352 }, 1347 },
1353 { 1348 {
1354 .cmd = NLBL_UNLABEL_C_STATICLISTDEF, 1349 .cmd = NLBL_UNLABEL_C_STATICLISTDEF,
1355 .flags = 0, 1350 .flags = 0,
1356 .policy = netlbl_unlabel_genl_policy,
1357 .doit = NULL, 1351 .doit = NULL,
1358 .dumpit = netlbl_unlabel_staticlistdef, 1352 .dumpit = netlbl_unlabel_staticlistdef,
1359 }, 1353 },
1360 { 1354 {
1361 .cmd = NLBL_UNLABEL_C_ACCEPT, 1355 .cmd = NLBL_UNLABEL_C_ACCEPT,
1362 .flags = GENL_ADMIN_PERM, 1356 .flags = GENL_ADMIN_PERM,
1363 .policy = netlbl_unlabel_genl_policy,
1364 .doit = netlbl_unlabel_accept, 1357 .doit = netlbl_unlabel_accept,
1365 .dumpit = NULL, 1358 .dumpit = NULL,
1366 }, 1359 },
1367 { 1360 {
1368 .cmd = NLBL_UNLABEL_C_LIST, 1361 .cmd = NLBL_UNLABEL_C_LIST,
1369 .flags = 0, 1362 .flags = 0,
1370 .policy = netlbl_unlabel_genl_policy,
1371 .doit = netlbl_unlabel_list, 1363 .doit = netlbl_unlabel_list,
1372 .dumpit = NULL, 1364 .dumpit = NULL,
1373 }, 1365 },
@@ -1378,6 +1370,7 @@ static struct genl_family netlbl_unlabel_gnl_family __ro_after_init = {
1378 .name = NETLBL_NLTYPE_UNLABELED_NAME, 1370 .name = NETLBL_NLTYPE_UNLABELED_NAME,
1379 .version = NETLBL_PROTO_VERSION, 1371 .version = NETLBL_PROTO_VERSION,
1380 .maxattr = NLBL_UNLABEL_A_MAX, 1372 .maxattr = NLBL_UNLABEL_A_MAX,
1373 .policy = netlbl_unlabel_genl_policy,
1381 .module = THIS_MODULE, 1374 .module = THIS_MODULE,
1382 .ops = netlbl_unlabel_genl_ops, 1375 .ops = netlbl_unlabel_genl_ops,
1383 .n_ops = ARRAY_SIZE(netlbl_unlabel_genl_ops), 1376 .n_ops = ARRAY_SIZE(netlbl_unlabel_genl_ops),
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 25eeb6d2a75a..a75ea33fb5ea 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -577,7 +577,7 @@ static int genl_family_rcv_msg(const struct genl_family *family,
577 577
578 if (attrbuf) { 578 if (attrbuf) {
579 err = nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr, 579 err = nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr,
580 ops->policy, extack); 580 family->policy, extack);
581 if (err < 0) 581 if (err < 0)
582 goto out; 582 goto out;
583 } 583 }
@@ -677,7 +677,7 @@ static int ctrl_fill_info(const struct genl_family *family, u32 portid, u32 seq,
677 op_flags |= GENL_CMD_CAP_DUMP; 677 op_flags |= GENL_CMD_CAP_DUMP;
678 if (ops->doit) 678 if (ops->doit)
679 op_flags |= GENL_CMD_CAP_DO; 679 op_flags |= GENL_CMD_CAP_DO;
680 if (ops->policy) 680 if (family->policy)
681 op_flags |= GENL_CMD_CAP_HASPOL; 681 op_flags |= GENL_CMD_CAP_HASPOL;
682 682
683 nest = nla_nest_start(skb, i + 1); 683 nest = nla_nest_start(skb, i + 1);
@@ -939,7 +939,6 @@ static const struct genl_ops genl_ctrl_ops[] = {
939 .cmd = CTRL_CMD_GETFAMILY, 939 .cmd = CTRL_CMD_GETFAMILY,
940 .doit = ctrl_getfamily, 940 .doit = ctrl_getfamily,
941 .dumpit = ctrl_dumpfamily, 941 .dumpit = ctrl_dumpfamily,
942 .policy = ctrl_policy,
943 }, 942 },
944}; 943};
945 944
@@ -957,6 +956,7 @@ static struct genl_family genl_ctrl __ro_after_init = {
957 .name = "nlctrl", 956 .name = "nlctrl",
958 .version = 0x2, 957 .version = 0x2,
959 .maxattr = CTRL_ATTR_MAX, 958 .maxattr = CTRL_ATTR_MAX,
959 .policy = ctrl_policy,
960 .netnsok = true, 960 .netnsok = true,
961}; 961};
962 962
diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
index 376181cc1def..4d9f3ac8d562 100644
--- a/net/nfc/netlink.c
+++ b/net/nfc/netlink.c
@@ -1670,99 +1670,80 @@ static const struct genl_ops nfc_genl_ops[] = {
1670 .doit = nfc_genl_get_device, 1670 .doit = nfc_genl_get_device,
1671 .dumpit = nfc_genl_dump_devices, 1671 .dumpit = nfc_genl_dump_devices,
1672 .done = nfc_genl_dump_devices_done, 1672 .done = nfc_genl_dump_devices_done,
1673 .policy = nfc_genl_policy,
1674 }, 1673 },
1675 { 1674 {
1676 .cmd = NFC_CMD_DEV_UP, 1675 .cmd = NFC_CMD_DEV_UP,
1677 .doit = nfc_genl_dev_up, 1676 .doit = nfc_genl_dev_up,
1678 .policy = nfc_genl_policy,
1679 }, 1677 },
1680 { 1678 {
1681 .cmd = NFC_CMD_DEV_DOWN, 1679 .cmd = NFC_CMD_DEV_DOWN,
1682 .doit = nfc_genl_dev_down, 1680 .doit = nfc_genl_dev_down,
1683 .policy = nfc_genl_policy,
1684 }, 1681 },
1685 { 1682 {
1686 .cmd = NFC_CMD_START_POLL, 1683 .cmd = NFC_CMD_START_POLL,
1687 .doit = nfc_genl_start_poll, 1684 .doit = nfc_genl_start_poll,
1688 .policy = nfc_genl_policy,
1689 }, 1685 },
1690 { 1686 {
1691 .cmd = NFC_CMD_STOP_POLL, 1687 .cmd = NFC_CMD_STOP_POLL,
1692 .doit = nfc_genl_stop_poll, 1688 .doit = nfc_genl_stop_poll,
1693 .policy = nfc_genl_policy,
1694 }, 1689 },
1695 { 1690 {
1696 .cmd = NFC_CMD_DEP_LINK_UP, 1691 .cmd = NFC_CMD_DEP_LINK_UP,
1697 .doit = nfc_genl_dep_link_up, 1692 .doit = nfc_genl_dep_link_up,
1698 .policy = nfc_genl_policy,
1699 }, 1693 },
1700 { 1694 {
1701 .cmd = NFC_CMD_DEP_LINK_DOWN, 1695 .cmd = NFC_CMD_DEP_LINK_DOWN,
1702 .doit = nfc_genl_dep_link_down, 1696 .doit = nfc_genl_dep_link_down,
1703 .policy = nfc_genl_policy,
1704 }, 1697 },
1705 { 1698 {
1706 .cmd = NFC_CMD_GET_TARGET, 1699 .cmd = NFC_CMD_GET_TARGET,
1707 .dumpit = nfc_genl_dump_targets, 1700 .dumpit = nfc_genl_dump_targets,
1708 .done = nfc_genl_dump_targets_done, 1701 .done = nfc_genl_dump_targets_done,
1709 .policy = nfc_genl_policy,
1710 }, 1702 },
1711 { 1703 {
1712 .cmd = NFC_CMD_LLC_GET_PARAMS, 1704 .cmd = NFC_CMD_LLC_GET_PARAMS,
1713 .doit = nfc_genl_llc_get_params, 1705 .doit = nfc_genl_llc_get_params,
1714 .policy = nfc_genl_policy,
1715 }, 1706 },
1716 { 1707 {
1717 .cmd = NFC_CMD_LLC_SET_PARAMS, 1708 .cmd = NFC_CMD_LLC_SET_PARAMS,
1718 .doit = nfc_genl_llc_set_params, 1709 .doit = nfc_genl_llc_set_params,
1719 .policy = nfc_genl_policy,
1720 }, 1710 },
1721 { 1711 {
1722 .cmd = NFC_CMD_LLC_SDREQ, 1712 .cmd = NFC_CMD_LLC_SDREQ,
1723 .doit = nfc_genl_llc_sdreq, 1713 .doit = nfc_genl_llc_sdreq,
1724 .policy = nfc_genl_policy,
1725 }, 1714 },
1726 { 1715 {
1727 .cmd = NFC_CMD_FW_DOWNLOAD, 1716 .cmd = NFC_CMD_FW_DOWNLOAD,
1728 .doit = nfc_genl_fw_download, 1717 .doit = nfc_genl_fw_download,
1729 .policy = nfc_genl_policy,
1730 }, 1718 },
1731 { 1719 {
1732 .cmd = NFC_CMD_ENABLE_SE, 1720 .cmd = NFC_CMD_ENABLE_SE,
1733 .doit = nfc_genl_enable_se, 1721 .doit = nfc_genl_enable_se,
1734 .policy = nfc_genl_policy,
1735 }, 1722 },
1736 { 1723 {
1737 .cmd = NFC_CMD_DISABLE_SE, 1724 .cmd = NFC_CMD_DISABLE_SE,
1738 .doit = nfc_genl_disable_se, 1725 .doit = nfc_genl_disable_se,
1739 .policy = nfc_genl_policy,
1740 }, 1726 },
1741 { 1727 {
1742 .cmd = NFC_CMD_GET_SE, 1728 .cmd = NFC_CMD_GET_SE,
1743 .dumpit = nfc_genl_dump_ses, 1729 .dumpit = nfc_genl_dump_ses,
1744 .done = nfc_genl_dump_ses_done, 1730 .done = nfc_genl_dump_ses_done,
1745 .policy = nfc_genl_policy,
1746 }, 1731 },
1747 { 1732 {
1748 .cmd = NFC_CMD_SE_IO, 1733 .cmd = NFC_CMD_SE_IO,
1749 .doit = nfc_genl_se_io, 1734 .doit = nfc_genl_se_io,
1750 .policy = nfc_genl_policy,
1751 }, 1735 },
1752 { 1736 {
1753 .cmd = NFC_CMD_ACTIVATE_TARGET, 1737 .cmd = NFC_CMD_ACTIVATE_TARGET,
1754 .doit = nfc_genl_activate_target, 1738 .doit = nfc_genl_activate_target,
1755 .policy = nfc_genl_policy,
1756 }, 1739 },
1757 { 1740 {
1758 .cmd = NFC_CMD_VENDOR, 1741 .cmd = NFC_CMD_VENDOR,
1759 .doit = nfc_genl_vendor_cmd, 1742 .doit = nfc_genl_vendor_cmd,
1760 .policy = nfc_genl_policy,
1761 }, 1743 },
1762 { 1744 {
1763 .cmd = NFC_CMD_DEACTIVATE_TARGET, 1745 .cmd = NFC_CMD_DEACTIVATE_TARGET,
1764 .doit = nfc_genl_deactivate_target, 1746 .doit = nfc_genl_deactivate_target,
1765 .policy = nfc_genl_policy,
1766 }, 1747 },
1767}; 1748};
1768 1749
@@ -1771,6 +1752,7 @@ static struct genl_family nfc_genl_family __ro_after_init = {
1771 .name = NFC_GENL_NAME, 1752 .name = NFC_GENL_NAME,
1772 .version = NFC_GENL_VERSION, 1753 .version = NFC_GENL_VERSION,
1773 .maxattr = NFC_ATTR_MAX, 1754 .maxattr = NFC_ATTR_MAX,
1755 .policy = nfc_genl_policy,
1774 .module = THIS_MODULE, 1756 .module = THIS_MODULE,
1775 .ops = nfc_genl_ops, 1757 .ops = nfc_genl_ops,
1776 .n_ops = ARRAY_SIZE(nfc_genl_ops), 1758 .n_ops = ARRAY_SIZE(nfc_genl_ops),
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index 1b6896896fff..51080004677e 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -2154,18 +2154,15 @@ static struct genl_ops ct_limit_genl_ops[] = {
2154 { .cmd = OVS_CT_LIMIT_CMD_SET, 2154 { .cmd = OVS_CT_LIMIT_CMD_SET,
2155 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 2155 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
2156 * privilege. */ 2156 * privilege. */
2157 .policy = ct_limit_policy,
2158 .doit = ovs_ct_limit_cmd_set, 2157 .doit = ovs_ct_limit_cmd_set,
2159 }, 2158 },
2160 { .cmd = OVS_CT_LIMIT_CMD_DEL, 2159 { .cmd = OVS_CT_LIMIT_CMD_DEL,
2161 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 2160 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
2162 * privilege. */ 2161 * privilege. */
2163 .policy = ct_limit_policy,
2164 .doit = ovs_ct_limit_cmd_del, 2162 .doit = ovs_ct_limit_cmd_del,
2165 }, 2163 },
2166 { .cmd = OVS_CT_LIMIT_CMD_GET, 2164 { .cmd = OVS_CT_LIMIT_CMD_GET,
2167 .flags = 0, /* OK for unprivileged users. */ 2165 .flags = 0, /* OK for unprivileged users. */
2168 .policy = ct_limit_policy,
2169 .doit = ovs_ct_limit_cmd_get, 2166 .doit = ovs_ct_limit_cmd_get,
2170 }, 2167 },
2171}; 2168};
@@ -2179,6 +2176,7 @@ struct genl_family dp_ct_limit_genl_family __ro_after_init = {
2179 .name = OVS_CT_LIMIT_FAMILY, 2176 .name = OVS_CT_LIMIT_FAMILY,
2180 .version = OVS_CT_LIMIT_VERSION, 2177 .version = OVS_CT_LIMIT_VERSION,
2181 .maxattr = OVS_CT_LIMIT_ATTR_MAX, 2178 .maxattr = OVS_CT_LIMIT_ATTR_MAX,
2179 .policy = ct_limit_policy,
2182 .netnsok = true, 2180 .netnsok = true,
2183 .parallel_ops = true, 2181 .parallel_ops = true,
2184 .ops = ct_limit_genl_ops, 2182 .ops = ct_limit_genl_ops,
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 9dd158ab51b3..a64d3eb1f9a9 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -639,7 +639,6 @@ static const struct nla_policy packet_policy[OVS_PACKET_ATTR_MAX + 1] = {
639static const struct genl_ops dp_packet_genl_ops[] = { 639static const struct genl_ops dp_packet_genl_ops[] = {
640 { .cmd = OVS_PACKET_CMD_EXECUTE, 640 { .cmd = OVS_PACKET_CMD_EXECUTE,
641 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 641 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
642 .policy = packet_policy,
643 .doit = ovs_packet_cmd_execute 642 .doit = ovs_packet_cmd_execute
644 } 643 }
645}; 644};
@@ -649,6 +648,7 @@ static struct genl_family dp_packet_genl_family __ro_after_init = {
649 .name = OVS_PACKET_FAMILY, 648 .name = OVS_PACKET_FAMILY,
650 .version = OVS_PACKET_VERSION, 649 .version = OVS_PACKET_VERSION,
651 .maxattr = OVS_PACKET_ATTR_MAX, 650 .maxattr = OVS_PACKET_ATTR_MAX,
651 .policy = packet_policy,
652 .netnsok = true, 652 .netnsok = true,
653 .parallel_ops = true, 653 .parallel_ops = true,
654 .ops = dp_packet_genl_ops, 654 .ops = dp_packet_genl_ops,
@@ -1424,23 +1424,19 @@ static const struct nla_policy flow_policy[OVS_FLOW_ATTR_MAX + 1] = {
1424static const struct genl_ops dp_flow_genl_ops[] = { 1424static const struct genl_ops dp_flow_genl_ops[] = {
1425 { .cmd = OVS_FLOW_CMD_NEW, 1425 { .cmd = OVS_FLOW_CMD_NEW,
1426 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1426 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1427 .policy = flow_policy,
1428 .doit = ovs_flow_cmd_new 1427 .doit = ovs_flow_cmd_new
1429 }, 1428 },
1430 { .cmd = OVS_FLOW_CMD_DEL, 1429 { .cmd = OVS_FLOW_CMD_DEL,
1431 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1430 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1432 .policy = flow_policy,
1433 .doit = ovs_flow_cmd_del 1431 .doit = ovs_flow_cmd_del
1434 }, 1432 },
1435 { .cmd = OVS_FLOW_CMD_GET, 1433 { .cmd = OVS_FLOW_CMD_GET,
1436 .flags = 0, /* OK for unprivileged users. */ 1434 .flags = 0, /* OK for unprivileged users. */
1437 .policy = flow_policy,
1438 .doit = ovs_flow_cmd_get, 1435 .doit = ovs_flow_cmd_get,
1439 .dumpit = ovs_flow_cmd_dump 1436 .dumpit = ovs_flow_cmd_dump
1440 }, 1437 },
1441 { .cmd = OVS_FLOW_CMD_SET, 1438 { .cmd = OVS_FLOW_CMD_SET,
1442 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1439 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1443 .policy = flow_policy,
1444 .doit = ovs_flow_cmd_set, 1440 .doit = ovs_flow_cmd_set,
1445 }, 1441 },
1446}; 1442};
@@ -1450,6 +1446,7 @@ static struct genl_family dp_flow_genl_family __ro_after_init = {
1450 .name = OVS_FLOW_FAMILY, 1446 .name = OVS_FLOW_FAMILY,
1451 .version = OVS_FLOW_VERSION, 1447 .version = OVS_FLOW_VERSION,
1452 .maxattr = OVS_FLOW_ATTR_MAX, 1448 .maxattr = OVS_FLOW_ATTR_MAX,
1449 .policy = flow_policy,
1453 .netnsok = true, 1450 .netnsok = true,
1454 .parallel_ops = true, 1451 .parallel_ops = true,
1455 .ops = dp_flow_genl_ops, 1452 .ops = dp_flow_genl_ops,
@@ -1817,23 +1814,19 @@ static const struct nla_policy datapath_policy[OVS_DP_ATTR_MAX + 1] = {
1817static const struct genl_ops dp_datapath_genl_ops[] = { 1814static const struct genl_ops dp_datapath_genl_ops[] = {
1818 { .cmd = OVS_DP_CMD_NEW, 1815 { .cmd = OVS_DP_CMD_NEW,
1819 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1816 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1820 .policy = datapath_policy,
1821 .doit = ovs_dp_cmd_new 1817 .doit = ovs_dp_cmd_new
1822 }, 1818 },
1823 { .cmd = OVS_DP_CMD_DEL, 1819 { .cmd = OVS_DP_CMD_DEL,
1824 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1820 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1825 .policy = datapath_policy,
1826 .doit = ovs_dp_cmd_del 1821 .doit = ovs_dp_cmd_del
1827 }, 1822 },
1828 { .cmd = OVS_DP_CMD_GET, 1823 { .cmd = OVS_DP_CMD_GET,
1829 .flags = 0, /* OK for unprivileged users. */ 1824 .flags = 0, /* OK for unprivileged users. */
1830 .policy = datapath_policy,
1831 .doit = ovs_dp_cmd_get, 1825 .doit = ovs_dp_cmd_get,
1832 .dumpit = ovs_dp_cmd_dump 1826 .dumpit = ovs_dp_cmd_dump
1833 }, 1827 },
1834 { .cmd = OVS_DP_CMD_SET, 1828 { .cmd = OVS_DP_CMD_SET,
1835 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 1829 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
1836 .policy = datapath_policy,
1837 .doit = ovs_dp_cmd_set, 1830 .doit = ovs_dp_cmd_set,
1838 }, 1831 },
1839}; 1832};
@@ -1843,6 +1836,7 @@ static struct genl_family dp_datapath_genl_family __ro_after_init = {
1843 .name = OVS_DATAPATH_FAMILY, 1836 .name = OVS_DATAPATH_FAMILY,
1844 .version = OVS_DATAPATH_VERSION, 1837 .version = OVS_DATAPATH_VERSION,
1845 .maxattr = OVS_DP_ATTR_MAX, 1838 .maxattr = OVS_DP_ATTR_MAX,
1839 .policy = datapath_policy,
1846 .netnsok = true, 1840 .netnsok = true,
1847 .parallel_ops = true, 1841 .parallel_ops = true,
1848 .ops = dp_datapath_genl_ops, 1842 .ops = dp_datapath_genl_ops,
@@ -2260,23 +2254,19 @@ static const struct nla_policy vport_policy[OVS_VPORT_ATTR_MAX + 1] = {
2260static const struct genl_ops dp_vport_genl_ops[] = { 2254static const struct genl_ops dp_vport_genl_ops[] = {
2261 { .cmd = OVS_VPORT_CMD_NEW, 2255 { .cmd = OVS_VPORT_CMD_NEW,
2262 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2256 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2263 .policy = vport_policy,
2264 .doit = ovs_vport_cmd_new 2257 .doit = ovs_vport_cmd_new
2265 }, 2258 },
2266 { .cmd = OVS_VPORT_CMD_DEL, 2259 { .cmd = OVS_VPORT_CMD_DEL,
2267 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2260 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2268 .policy = vport_policy,
2269 .doit = ovs_vport_cmd_del 2261 .doit = ovs_vport_cmd_del
2270 }, 2262 },
2271 { .cmd = OVS_VPORT_CMD_GET, 2263 { .cmd = OVS_VPORT_CMD_GET,
2272 .flags = 0, /* OK for unprivileged users. */ 2264 .flags = 0, /* OK for unprivileged users. */
2273 .policy = vport_policy,
2274 .doit = ovs_vport_cmd_get, 2265 .doit = ovs_vport_cmd_get,
2275 .dumpit = ovs_vport_cmd_dump 2266 .dumpit = ovs_vport_cmd_dump
2276 }, 2267 },
2277 { .cmd = OVS_VPORT_CMD_SET, 2268 { .cmd = OVS_VPORT_CMD_SET,
2278 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */ 2269 .flags = GENL_UNS_ADMIN_PERM, /* Requires CAP_NET_ADMIN privilege. */
2279 .policy = vport_policy,
2280 .doit = ovs_vport_cmd_set, 2270 .doit = ovs_vport_cmd_set,
2281 }, 2271 },
2282}; 2272};
@@ -2286,6 +2276,7 @@ struct genl_family dp_vport_genl_family __ro_after_init = {
2286 .name = OVS_VPORT_FAMILY, 2276 .name = OVS_VPORT_FAMILY,
2287 .version = OVS_VPORT_VERSION, 2277 .version = OVS_VPORT_VERSION,
2288 .maxattr = OVS_VPORT_ATTR_MAX, 2278 .maxattr = OVS_VPORT_ATTR_MAX,
2279 .policy = vport_policy,
2289 .netnsok = true, 2280 .netnsok = true,
2290 .parallel_ops = true, 2281 .parallel_ops = true,
2291 .ops = dp_vport_genl_ops, 2282 .ops = dp_vport_genl_ops,
diff --git a/net/openvswitch/meter.c b/net/openvswitch/meter.c
index 43849d752a1e..0be3d097ae01 100644
--- a/net/openvswitch/meter.c
+++ b/net/openvswitch/meter.c
@@ -527,26 +527,22 @@ bool ovs_meter_execute(struct datapath *dp, struct sk_buff *skb,
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 .flags = 0, /* OK for unprivileged users. */ 529 .flags = 0, /* OK for unprivileged users. */
530 .policy = meter_policy,
531 .doit = ovs_meter_cmd_features 530 .doit = ovs_meter_cmd_features
532 }, 531 },
533 { .cmd = OVS_METER_CMD_SET, 532 { .cmd = OVS_METER_CMD_SET,
534 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 533 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
535 * privilege. 534 * privilege.
536 */ 535 */
537 .policy = meter_policy,
538 .doit = ovs_meter_cmd_set, 536 .doit = ovs_meter_cmd_set,
539 }, 537 },
540 { .cmd = OVS_METER_CMD_GET, 538 { .cmd = OVS_METER_CMD_GET,
541 .flags = 0, /* OK for unprivileged users. */ 539 .flags = 0, /* OK for unprivileged users. */
542 .policy = meter_policy,
543 .doit = ovs_meter_cmd_get, 540 .doit = ovs_meter_cmd_get,
544 }, 541 },
545 { .cmd = OVS_METER_CMD_DEL, 542 { .cmd = OVS_METER_CMD_DEL,
546 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN 543 .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN
547 * privilege. 544 * privilege.
548 */ 545 */
549 .policy = meter_policy,
550 .doit = ovs_meter_cmd_del 546 .doit = ovs_meter_cmd_del
551 }, 547 },
552}; 548};
@@ -560,6 +556,7 @@ struct genl_family dp_meter_genl_family __ro_after_init = {
560 .name = OVS_METER_FAMILY, 556 .name = OVS_METER_FAMILY,
561 .version = OVS_METER_VERSION, 557 .version = OVS_METER_VERSION,
562 .maxattr = OVS_METER_ATTR_MAX, 558 .maxattr = OVS_METER_ATTR_MAX,
559 .policy = meter_policy,
563 .netnsok = true, 560 .netnsok = true,
564 .parallel_ops = true, 561 .parallel_ops = true,
565 .ops = dp_meter_genl_ops, 562 .ops = dp_meter_genl_ops,
diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c
index 8d2f6296279c..3cdf81cf97a3 100644
--- a/net/smc/smc_pnet.c
+++ b/net/smc/smc_pnet.c
@@ -611,7 +611,6 @@ static const struct genl_ops smc_pnet_ops[] = {
611 { 611 {
612 .cmd = SMC_PNETID_GET, 612 .cmd = SMC_PNETID_GET,
613 .flags = GENL_ADMIN_PERM, 613 .flags = GENL_ADMIN_PERM,
614 .policy = smc_pnet_policy,
615 .doit = smc_pnet_get, 614 .doit = smc_pnet_get,
616 .dumpit = smc_pnet_dump, 615 .dumpit = smc_pnet_dump,
617 .start = smc_pnet_dump_start 616 .start = smc_pnet_dump_start
@@ -619,19 +618,16 @@ static const struct genl_ops smc_pnet_ops[] = {
619 { 618 {
620 .cmd = SMC_PNETID_ADD, 619 .cmd = SMC_PNETID_ADD,
621 .flags = GENL_ADMIN_PERM, 620 .flags = GENL_ADMIN_PERM,
622 .policy = smc_pnet_policy,
623 .doit = smc_pnet_add 621 .doit = smc_pnet_add
624 }, 622 },
625 { 623 {
626 .cmd = SMC_PNETID_DEL, 624 .cmd = SMC_PNETID_DEL,
627 .flags = GENL_ADMIN_PERM, 625 .flags = GENL_ADMIN_PERM,
628 .policy = smc_pnet_policy,
629 .doit = smc_pnet_del 626 .doit = smc_pnet_del
630 }, 627 },
631 { 628 {
632 .cmd = SMC_PNETID_FLUSH, 629 .cmd = SMC_PNETID_FLUSH,
633 .flags = GENL_ADMIN_PERM, 630 .flags = GENL_ADMIN_PERM,
634 .policy = smc_pnet_policy,
635 .doit = smc_pnet_flush 631 .doit = smc_pnet_flush
636 } 632 }
637}; 633};
@@ -642,6 +638,7 @@ static struct genl_family smc_pnet_nl_family __ro_after_init = {
642 .name = SMCR_GENL_FAMILY_NAME, 638 .name = SMCR_GENL_FAMILY_NAME,
643 .version = SMCR_GENL_FAMILY_VERSION, 639 .version = SMCR_GENL_FAMILY_VERSION,
644 .maxattr = SMC_PNETID_MAX, 640 .maxattr = SMC_PNETID_MAX,
641 .policy = smc_pnet_policy,
645 .netnsok = true, 642 .netnsok = true,
646 .module = THIS_MODULE, 643 .module = THIS_MODULE,
647 .ops = smc_pnet_ops, 644 .ops = smc_pnet_ops,
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c
index 5240f64e8ccc..2d178df0a89f 100644
--- a/net/tipc/netlink.c
+++ b/net/tipc/netlink.c
@@ -144,114 +144,93 @@ static const struct genl_ops tipc_genl_v2_ops[] = {
144 { 144 {
145 .cmd = TIPC_NL_BEARER_DISABLE, 145 .cmd = TIPC_NL_BEARER_DISABLE,
146 .doit = tipc_nl_bearer_disable, 146 .doit = tipc_nl_bearer_disable,
147 .policy = tipc_nl_policy,
148 }, 147 },
149 { 148 {
150 .cmd = TIPC_NL_BEARER_ENABLE, 149 .cmd = TIPC_NL_BEARER_ENABLE,
151 .doit = tipc_nl_bearer_enable, 150 .doit = tipc_nl_bearer_enable,
152 .policy = tipc_nl_policy,
153 }, 151 },
154 { 152 {
155 .cmd = TIPC_NL_BEARER_GET, 153 .cmd = TIPC_NL_BEARER_GET,
156 .doit = tipc_nl_bearer_get, 154 .doit = tipc_nl_bearer_get,
157 .dumpit = tipc_nl_bearer_dump, 155 .dumpit = tipc_nl_bearer_dump,
158 .policy = tipc_nl_policy,
159 }, 156 },
160 { 157 {
161 .cmd = TIPC_NL_BEARER_ADD, 158 .cmd = TIPC_NL_BEARER_ADD,
162 .doit = tipc_nl_bearer_add, 159 .doit = tipc_nl_bearer_add,
163 .policy = tipc_nl_policy,
164 }, 160 },
165 { 161 {
166 .cmd = TIPC_NL_BEARER_SET, 162 .cmd = TIPC_NL_BEARER_SET,
167 .doit = tipc_nl_bearer_set, 163 .doit = tipc_nl_bearer_set,
168 .policy = tipc_nl_policy,
169 }, 164 },
170 { 165 {
171 .cmd = TIPC_NL_SOCK_GET, 166 .cmd = TIPC_NL_SOCK_GET,
172 .start = tipc_dump_start, 167 .start = tipc_dump_start,
173 .dumpit = tipc_nl_sk_dump, 168 .dumpit = tipc_nl_sk_dump,
174 .done = tipc_dump_done, 169 .done = tipc_dump_done,
175 .policy = tipc_nl_policy,
176 }, 170 },
177 { 171 {
178 .cmd = TIPC_NL_PUBL_GET, 172 .cmd = TIPC_NL_PUBL_GET,
179 .dumpit = tipc_nl_publ_dump, 173 .dumpit = tipc_nl_publ_dump,
180 .policy = tipc_nl_policy,
181 }, 174 },
182 { 175 {
183 .cmd = TIPC_NL_LINK_GET, 176 .cmd = TIPC_NL_LINK_GET,
184 .doit = tipc_nl_node_get_link, 177 .doit = tipc_nl_node_get_link,
185 .dumpit = tipc_nl_node_dump_link, 178 .dumpit = tipc_nl_node_dump_link,
186 .policy = tipc_nl_policy,
187 }, 179 },
188 { 180 {
189 .cmd = TIPC_NL_LINK_SET, 181 .cmd = TIPC_NL_LINK_SET,
190 .doit = tipc_nl_node_set_link, 182 .doit = tipc_nl_node_set_link,
191 .policy = tipc_nl_policy,
192 }, 183 },
193 { 184 {
194 .cmd = TIPC_NL_LINK_RESET_STATS, 185 .cmd = TIPC_NL_LINK_RESET_STATS,
195 .doit = tipc_nl_node_reset_link_stats, 186 .doit = tipc_nl_node_reset_link_stats,
196 .policy = tipc_nl_policy,
197 }, 187 },
198 { 188 {
199 .cmd = TIPC_NL_MEDIA_GET, 189 .cmd = TIPC_NL_MEDIA_GET,
200 .doit = tipc_nl_media_get, 190 .doit = tipc_nl_media_get,
201 .dumpit = tipc_nl_media_dump, 191 .dumpit = tipc_nl_media_dump,
202 .policy = tipc_nl_policy,
203 }, 192 },
204 { 193 {
205 .cmd = TIPC_NL_MEDIA_SET, 194 .cmd = TIPC_NL_MEDIA_SET,
206 .doit = tipc_nl_media_set, 195 .doit = tipc_nl_media_set,
207 .policy = tipc_nl_policy,
208 }, 196 },
209 { 197 {
210 .cmd = TIPC_NL_NODE_GET, 198 .cmd = TIPC_NL_NODE_GET,
211 .dumpit = tipc_nl_node_dump, 199 .dumpit = tipc_nl_node_dump,
212 .policy = tipc_nl_policy,
213 }, 200 },
214 { 201 {
215 .cmd = TIPC_NL_NET_GET, 202 .cmd = TIPC_NL_NET_GET,
216 .dumpit = tipc_nl_net_dump, 203 .dumpit = tipc_nl_net_dump,
217 .policy = tipc_nl_policy,
218 }, 204 },
219 { 205 {
220 .cmd = TIPC_NL_NET_SET, 206 .cmd = TIPC_NL_NET_SET,
221 .doit = tipc_nl_net_set, 207 .doit = tipc_nl_net_set,
222 .policy = tipc_nl_policy,
223 }, 208 },
224 { 209 {
225 .cmd = TIPC_NL_NAME_TABLE_GET, 210 .cmd = TIPC_NL_NAME_TABLE_GET,
226 .dumpit = tipc_nl_name_table_dump, 211 .dumpit = tipc_nl_name_table_dump,
227 .policy = tipc_nl_policy,
228 }, 212 },
229 { 213 {
230 .cmd = TIPC_NL_MON_SET, 214 .cmd = TIPC_NL_MON_SET,
231 .doit = tipc_nl_node_set_monitor, 215 .doit = tipc_nl_node_set_monitor,
232 .policy = tipc_nl_policy,
233 }, 216 },
234 { 217 {
235 .cmd = TIPC_NL_MON_GET, 218 .cmd = TIPC_NL_MON_GET,
236 .doit = tipc_nl_node_get_monitor, 219 .doit = tipc_nl_node_get_monitor,
237 .dumpit = tipc_nl_node_dump_monitor, 220 .dumpit = tipc_nl_node_dump_monitor,
238 .policy = tipc_nl_policy,
239 }, 221 },
240 { 222 {
241 .cmd = TIPC_NL_MON_PEER_GET, 223 .cmd = TIPC_NL_MON_PEER_GET,
242 .dumpit = tipc_nl_node_dump_monitor_peer, 224 .dumpit = tipc_nl_node_dump_monitor_peer,
243 .policy = tipc_nl_policy,
244 }, 225 },
245 { 226 {
246 .cmd = TIPC_NL_PEER_REMOVE, 227 .cmd = TIPC_NL_PEER_REMOVE,
247 .doit = tipc_nl_peer_rm, 228 .doit = tipc_nl_peer_rm,
248 .policy = tipc_nl_policy,
249 }, 229 },
250#ifdef CONFIG_TIPC_MEDIA_UDP 230#ifdef CONFIG_TIPC_MEDIA_UDP
251 { 231 {
252 .cmd = TIPC_NL_UDP_GET_REMOTEIP, 232 .cmd = TIPC_NL_UDP_GET_REMOTEIP,
253 .dumpit = tipc_udp_nl_dump_remoteip, 233 .dumpit = tipc_udp_nl_dump_remoteip,
254 .policy = tipc_nl_policy,
255 }, 234 },
256#endif 235#endif
257}; 236};
@@ -261,6 +240,7 @@ struct genl_family tipc_genl_family __ro_after_init = {
261 .version = TIPC_GENL_V2_VERSION, 240 .version = TIPC_GENL_V2_VERSION,
262 .hdrsize = 0, 241 .hdrsize = 0,
263 .maxattr = TIPC_NLA_MAX, 242 .maxattr = TIPC_NLA_MAX,
243 .policy = tipc_nl_policy,
264 .netnsok = true, 244 .netnsok = true,
265 .module = THIS_MODULE, 245 .module = THIS_MODULE,
266 .ops = tipc_genl_v2_ops, 246 .ops = tipc_genl_v2_ops,
diff --git a/net/wimax/stack.c b/net/wimax/stack.c
index a6307813b6d5..b7f571e55448 100644
--- a/net/wimax/stack.c
+++ b/net/wimax/stack.c
@@ -420,25 +420,21 @@ static 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 .flags = GENL_ADMIN_PERM, 422 .flags = GENL_ADMIN_PERM,
423 .policy = wimax_gnl_policy,
424 .doit = wimax_gnl_doit_msg_from_user, 423 .doit = wimax_gnl_doit_msg_from_user,
425 }, 424 },
426 { 425 {
427 .cmd = WIMAX_GNL_OP_RESET, 426 .cmd = WIMAX_GNL_OP_RESET,
428 .flags = GENL_ADMIN_PERM, 427 .flags = GENL_ADMIN_PERM,
429 .policy = wimax_gnl_policy,
430 .doit = wimax_gnl_doit_reset, 428 .doit = wimax_gnl_doit_reset,
431 }, 429 },
432 { 430 {
433 .cmd = WIMAX_GNL_OP_RFKILL, 431 .cmd = WIMAX_GNL_OP_RFKILL,
434 .flags = GENL_ADMIN_PERM, 432 .flags = GENL_ADMIN_PERM,
435 .policy = wimax_gnl_policy,
436 .doit = wimax_gnl_doit_rfkill, 433 .doit = wimax_gnl_doit_rfkill,
437 }, 434 },
438 { 435 {
439 .cmd = WIMAX_GNL_OP_STATE_GET, 436 .cmd = WIMAX_GNL_OP_STATE_GET,
440 .flags = GENL_ADMIN_PERM, 437 .flags = GENL_ADMIN_PERM,
441 .policy = wimax_gnl_policy,
442 .doit = wimax_gnl_doit_state_get, 438 .doit = wimax_gnl_doit_state_get,
443 }, 439 },
444}; 440};
@@ -582,6 +578,7 @@ struct genl_family wimax_gnl_family __ro_after_init = {
582 .version = WIMAX_GNL_VERSION, 578 .version = WIMAX_GNL_VERSION,
583 .hdrsize = 0, 579 .hdrsize = 0,
584 .maxattr = WIMAX_GNL_ATTR_MAX, 580 .maxattr = WIMAX_GNL_ATTR_MAX,
581 .policy = wimax_gnl_policy,
585 .module = THIS_MODULE, 582 .module = THIS_MODULE,
586 .ops = wimax_gnl_ops, 583 .ops = wimax_gnl_ops,
587 .n_ops = ARRAY_SIZE(wimax_gnl_ops), 584 .n_ops = ARRAY_SIZE(wimax_gnl_ops),
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 25a9e3b5c154..33408ba1d7ee 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -13368,7 +13368,6 @@ static const struct genl_ops nl80211_ops[] = {
13368 .doit = nl80211_get_wiphy, 13368 .doit = nl80211_get_wiphy,
13369 .dumpit = nl80211_dump_wiphy, 13369 .dumpit = nl80211_dump_wiphy,
13370 .done = nl80211_dump_wiphy_done, 13370 .done = nl80211_dump_wiphy_done,
13371 .policy = nl80211_policy,
13372 /* can be retrieved by unprivileged users */ 13371 /* can be retrieved by unprivileged users */
13373 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13372 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13374 NL80211_FLAG_NEED_RTNL, 13373 NL80211_FLAG_NEED_RTNL,
@@ -13376,7 +13375,6 @@ static const struct genl_ops nl80211_ops[] = {
13376 { 13375 {
13377 .cmd = NL80211_CMD_SET_WIPHY, 13376 .cmd = NL80211_CMD_SET_WIPHY,
13378 .doit = nl80211_set_wiphy, 13377 .doit = nl80211_set_wiphy,
13379 .policy = nl80211_policy,
13380 .flags = GENL_UNS_ADMIN_PERM, 13378 .flags = GENL_UNS_ADMIN_PERM,
13381 .internal_flags = NL80211_FLAG_NEED_RTNL, 13379 .internal_flags = NL80211_FLAG_NEED_RTNL,
13382 }, 13380 },
@@ -13384,7 +13382,6 @@ static const struct genl_ops nl80211_ops[] = {
13384 .cmd = NL80211_CMD_GET_INTERFACE, 13382 .cmd = NL80211_CMD_GET_INTERFACE,
13385 .doit = nl80211_get_interface, 13383 .doit = nl80211_get_interface,
13386 .dumpit = nl80211_dump_interface, 13384 .dumpit = nl80211_dump_interface,
13387 .policy = nl80211_policy,
13388 /* can be retrieved by unprivileged users */ 13385 /* can be retrieved by unprivileged users */
13389 .internal_flags = NL80211_FLAG_NEED_WDEV | 13386 .internal_flags = NL80211_FLAG_NEED_WDEV |
13390 NL80211_FLAG_NEED_RTNL, 13387 NL80211_FLAG_NEED_RTNL,
@@ -13392,7 +13389,6 @@ static const struct genl_ops nl80211_ops[] = {
13392 { 13389 {
13393 .cmd = NL80211_CMD_SET_INTERFACE, 13390 .cmd = NL80211_CMD_SET_INTERFACE,
13394 .doit = nl80211_set_interface, 13391 .doit = nl80211_set_interface,
13395 .policy = nl80211_policy,
13396 .flags = GENL_UNS_ADMIN_PERM, 13392 .flags = GENL_UNS_ADMIN_PERM,
13397 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13393 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13398 NL80211_FLAG_NEED_RTNL, 13394 NL80211_FLAG_NEED_RTNL,
@@ -13400,7 +13396,6 @@ static const struct genl_ops nl80211_ops[] = {
13400 { 13396 {
13401 .cmd = NL80211_CMD_NEW_INTERFACE, 13397 .cmd = NL80211_CMD_NEW_INTERFACE,
13402 .doit = nl80211_new_interface, 13398 .doit = nl80211_new_interface,
13403 .policy = nl80211_policy,
13404 .flags = GENL_UNS_ADMIN_PERM, 13399 .flags = GENL_UNS_ADMIN_PERM,
13405 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13400 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13406 NL80211_FLAG_NEED_RTNL, 13401 NL80211_FLAG_NEED_RTNL,
@@ -13408,7 +13403,6 @@ static const struct genl_ops nl80211_ops[] = {
13408 { 13403 {
13409 .cmd = NL80211_CMD_DEL_INTERFACE, 13404 .cmd = NL80211_CMD_DEL_INTERFACE,
13410 .doit = nl80211_del_interface, 13405 .doit = nl80211_del_interface,
13411 .policy = nl80211_policy,
13412 .flags = GENL_UNS_ADMIN_PERM, 13406 .flags = GENL_UNS_ADMIN_PERM,
13413 .internal_flags = NL80211_FLAG_NEED_WDEV | 13407 .internal_flags = NL80211_FLAG_NEED_WDEV |
13414 NL80211_FLAG_NEED_RTNL, 13408 NL80211_FLAG_NEED_RTNL,
@@ -13416,7 +13410,6 @@ static const struct genl_ops nl80211_ops[] = {
13416 { 13410 {
13417 .cmd = NL80211_CMD_GET_KEY, 13411 .cmd = NL80211_CMD_GET_KEY,
13418 .doit = nl80211_get_key, 13412 .doit = nl80211_get_key,
13419 .policy = nl80211_policy,
13420 .flags = GENL_UNS_ADMIN_PERM, 13413 .flags = GENL_UNS_ADMIN_PERM,
13421 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13414 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13422 NL80211_FLAG_NEED_RTNL, 13415 NL80211_FLAG_NEED_RTNL,
@@ -13424,7 +13417,6 @@ static const struct genl_ops nl80211_ops[] = {
13424 { 13417 {
13425 .cmd = NL80211_CMD_SET_KEY, 13418 .cmd = NL80211_CMD_SET_KEY,
13426 .doit = nl80211_set_key, 13419 .doit = nl80211_set_key,
13427 .policy = nl80211_policy,
13428 .flags = GENL_UNS_ADMIN_PERM, 13420 .flags = GENL_UNS_ADMIN_PERM,
13429 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13421 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13430 NL80211_FLAG_NEED_RTNL | 13422 NL80211_FLAG_NEED_RTNL |
@@ -13433,7 +13425,6 @@ static const struct genl_ops nl80211_ops[] = {
13433 { 13425 {
13434 .cmd = NL80211_CMD_NEW_KEY, 13426 .cmd = NL80211_CMD_NEW_KEY,
13435 .doit = nl80211_new_key, 13427 .doit = nl80211_new_key,
13436 .policy = nl80211_policy,
13437 .flags = GENL_UNS_ADMIN_PERM, 13428 .flags = GENL_UNS_ADMIN_PERM,
13438 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13429 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13439 NL80211_FLAG_NEED_RTNL | 13430 NL80211_FLAG_NEED_RTNL |
@@ -13442,14 +13433,12 @@ static const struct genl_ops nl80211_ops[] = {
13442 { 13433 {
13443 .cmd = NL80211_CMD_DEL_KEY, 13434 .cmd = NL80211_CMD_DEL_KEY,
13444 .doit = nl80211_del_key, 13435 .doit = nl80211_del_key,
13445 .policy = nl80211_policy,
13446 .flags = GENL_UNS_ADMIN_PERM, 13436 .flags = GENL_UNS_ADMIN_PERM,
13447 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13437 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13448 NL80211_FLAG_NEED_RTNL, 13438 NL80211_FLAG_NEED_RTNL,
13449 }, 13439 },
13450 { 13440 {
13451 .cmd = NL80211_CMD_SET_BEACON, 13441 .cmd = NL80211_CMD_SET_BEACON,
13452 .policy = nl80211_policy,
13453 .flags = GENL_UNS_ADMIN_PERM, 13442 .flags = GENL_UNS_ADMIN_PERM,
13454 .doit = nl80211_set_beacon, 13443 .doit = nl80211_set_beacon,
13455 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13444 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13457,7 +13446,6 @@ static const struct genl_ops nl80211_ops[] = {
13457 }, 13446 },
13458 { 13447 {
13459 .cmd = NL80211_CMD_START_AP, 13448 .cmd = NL80211_CMD_START_AP,
13460 .policy = nl80211_policy,
13461 .flags = GENL_UNS_ADMIN_PERM, 13449 .flags = GENL_UNS_ADMIN_PERM,
13462 .doit = nl80211_start_ap, 13450 .doit = nl80211_start_ap,
13463 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13451 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13465,7 +13453,6 @@ static const struct genl_ops nl80211_ops[] = {
13465 }, 13453 },
13466 { 13454 {
13467 .cmd = NL80211_CMD_STOP_AP, 13455 .cmd = NL80211_CMD_STOP_AP,
13468 .policy = nl80211_policy,
13469 .flags = GENL_UNS_ADMIN_PERM, 13456 .flags = GENL_UNS_ADMIN_PERM,
13470 .doit = nl80211_stop_ap, 13457 .doit = nl80211_stop_ap,
13471 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13458 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
@@ -13475,14 +13462,12 @@ static const struct genl_ops nl80211_ops[] = {
13475 .cmd = NL80211_CMD_GET_STATION, 13462 .cmd = NL80211_CMD_GET_STATION,
13476 .doit = nl80211_get_station, 13463 .doit = nl80211_get_station,
13477 .dumpit = nl80211_dump_station, 13464 .dumpit = nl80211_dump_station,
13478 .policy = nl80211_policy,
13479 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13465 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13480 NL80211_FLAG_NEED_RTNL, 13466 NL80211_FLAG_NEED_RTNL,
13481 }, 13467 },
13482 { 13468 {
13483 .cmd = NL80211_CMD_SET_STATION, 13469 .cmd = NL80211_CMD_SET_STATION,
13484 .doit = nl80211_set_station, 13470 .doit = nl80211_set_station,
13485 .policy = nl80211_policy,
13486 .flags = GENL_UNS_ADMIN_PERM, 13471 .flags = GENL_UNS_ADMIN_PERM,
13487 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13472 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13488 NL80211_FLAG_NEED_RTNL, 13473 NL80211_FLAG_NEED_RTNL,
@@ -13490,7 +13475,6 @@ static const struct genl_ops nl80211_ops[] = {
13490 { 13475 {
13491 .cmd = NL80211_CMD_NEW_STATION, 13476 .cmd = NL80211_CMD_NEW_STATION,
13492 .doit = nl80211_new_station, 13477 .doit = nl80211_new_station,
13493 .policy = nl80211_policy,
13494 .flags = GENL_UNS_ADMIN_PERM, 13478 .flags = GENL_UNS_ADMIN_PERM,
13495 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13479 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13496 NL80211_FLAG_NEED_RTNL, 13480 NL80211_FLAG_NEED_RTNL,
@@ -13498,7 +13482,6 @@ static const struct genl_ops nl80211_ops[] = {
13498 { 13482 {
13499 .cmd = NL80211_CMD_DEL_STATION, 13483 .cmd = NL80211_CMD_DEL_STATION,
13500 .doit = nl80211_del_station, 13484 .doit = nl80211_del_station,
13501 .policy = nl80211_policy,
13502 .flags = GENL_UNS_ADMIN_PERM, 13485 .flags = GENL_UNS_ADMIN_PERM,
13503 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13486 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13504 NL80211_FLAG_NEED_RTNL, 13487 NL80211_FLAG_NEED_RTNL,
@@ -13507,7 +13490,6 @@ static const struct genl_ops nl80211_ops[] = {
13507 .cmd = NL80211_CMD_GET_MPATH, 13490 .cmd = NL80211_CMD_GET_MPATH,
13508 .doit = nl80211_get_mpath, 13491 .doit = nl80211_get_mpath,
13509 .dumpit = nl80211_dump_mpath, 13492 .dumpit = nl80211_dump_mpath,
13510 .policy = nl80211_policy,
13511 .flags = GENL_UNS_ADMIN_PERM, 13493 .flags = GENL_UNS_ADMIN_PERM,
13512 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13494 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13513 NL80211_FLAG_NEED_RTNL, 13495 NL80211_FLAG_NEED_RTNL,
@@ -13516,7 +13498,6 @@ static const struct genl_ops nl80211_ops[] = {
13516 .cmd = NL80211_CMD_GET_MPP, 13498 .cmd = NL80211_CMD_GET_MPP,
13517 .doit = nl80211_get_mpp, 13499 .doit = nl80211_get_mpp,
13518 .dumpit = nl80211_dump_mpp, 13500 .dumpit = nl80211_dump_mpp,
13519 .policy = nl80211_policy,
13520 .flags = GENL_UNS_ADMIN_PERM, 13501 .flags = GENL_UNS_ADMIN_PERM,
13521 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13502 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13522 NL80211_FLAG_NEED_RTNL, 13503 NL80211_FLAG_NEED_RTNL,
@@ -13524,7 +13505,6 @@ static const struct genl_ops nl80211_ops[] = {
13524 { 13505 {
13525 .cmd = NL80211_CMD_SET_MPATH, 13506 .cmd = NL80211_CMD_SET_MPATH,
13526 .doit = nl80211_set_mpath, 13507 .doit = nl80211_set_mpath,
13527 .policy = nl80211_policy,
13528 .flags = GENL_UNS_ADMIN_PERM, 13508 .flags = GENL_UNS_ADMIN_PERM,
13529 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13509 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13530 NL80211_FLAG_NEED_RTNL, 13510 NL80211_FLAG_NEED_RTNL,
@@ -13532,7 +13512,6 @@ static const struct genl_ops nl80211_ops[] = {
13532 { 13512 {
13533 .cmd = NL80211_CMD_NEW_MPATH, 13513 .cmd = NL80211_CMD_NEW_MPATH,
13534 .doit = nl80211_new_mpath, 13514 .doit = nl80211_new_mpath,
13535 .policy = nl80211_policy,
13536 .flags = GENL_UNS_ADMIN_PERM, 13515 .flags = GENL_UNS_ADMIN_PERM,
13537 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13516 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13538 NL80211_FLAG_NEED_RTNL, 13517 NL80211_FLAG_NEED_RTNL,
@@ -13540,7 +13519,6 @@ static const struct genl_ops nl80211_ops[] = {
13540 { 13519 {
13541 .cmd = NL80211_CMD_DEL_MPATH, 13520 .cmd = NL80211_CMD_DEL_MPATH,
13542 .doit = nl80211_del_mpath, 13521 .doit = nl80211_del_mpath,
13543 .policy = nl80211_policy,
13544 .flags = GENL_UNS_ADMIN_PERM, 13522 .flags = GENL_UNS_ADMIN_PERM,
13545 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13523 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13546 NL80211_FLAG_NEED_RTNL, 13524 NL80211_FLAG_NEED_RTNL,
@@ -13548,7 +13526,6 @@ static const struct genl_ops nl80211_ops[] = {
13548 { 13526 {
13549 .cmd = NL80211_CMD_SET_BSS, 13527 .cmd = NL80211_CMD_SET_BSS,
13550 .doit = nl80211_set_bss, 13528 .doit = nl80211_set_bss,
13551 .policy = nl80211_policy,
13552 .flags = GENL_UNS_ADMIN_PERM, 13529 .flags = GENL_UNS_ADMIN_PERM,
13553 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13530 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13554 NL80211_FLAG_NEED_RTNL, 13531 NL80211_FLAG_NEED_RTNL,
@@ -13557,7 +13534,6 @@ static const struct genl_ops nl80211_ops[] = {
13557 .cmd = NL80211_CMD_GET_REG, 13534 .cmd = NL80211_CMD_GET_REG,
13558 .doit = nl80211_get_reg_do, 13535 .doit = nl80211_get_reg_do,
13559 .dumpit = nl80211_get_reg_dump, 13536 .dumpit = nl80211_get_reg_dump,
13560 .policy = nl80211_policy,
13561 .internal_flags = NL80211_FLAG_NEED_RTNL, 13537 .internal_flags = NL80211_FLAG_NEED_RTNL,
13562 /* can be retrieved by unprivileged users */ 13538 /* can be retrieved by unprivileged users */
13563 }, 13539 },
@@ -13565,7 +13541,6 @@ static const struct genl_ops nl80211_ops[] = {
13565 { 13541 {
13566 .cmd = NL80211_CMD_SET_REG, 13542 .cmd = NL80211_CMD_SET_REG,
13567 .doit = nl80211_set_reg, 13543 .doit = nl80211_set_reg,
13568 .policy = nl80211_policy,
13569 .flags = GENL_ADMIN_PERM, 13544 .flags = GENL_ADMIN_PERM,
13570 .internal_flags = NL80211_FLAG_NEED_RTNL, 13545 .internal_flags = NL80211_FLAG_NEED_RTNL,
13571 }, 13546 },
@@ -13573,19 +13548,16 @@ static const struct genl_ops nl80211_ops[] = {
13573 { 13548 {
13574 .cmd = NL80211_CMD_REQ_SET_REG, 13549 .cmd = NL80211_CMD_REQ_SET_REG,
13575 .doit = nl80211_req_set_reg, 13550 .doit = nl80211_req_set_reg,
13576 .policy = nl80211_policy,
13577 .flags = GENL_ADMIN_PERM, 13551 .flags = GENL_ADMIN_PERM,
13578 }, 13552 },
13579 { 13553 {
13580 .cmd = NL80211_CMD_RELOAD_REGDB, 13554 .cmd = NL80211_CMD_RELOAD_REGDB,
13581 .doit = nl80211_reload_regdb, 13555 .doit = nl80211_reload_regdb,
13582 .policy = nl80211_policy,
13583 .flags = GENL_ADMIN_PERM, 13556 .flags = GENL_ADMIN_PERM,
13584 }, 13557 },
13585 { 13558 {
13586 .cmd = NL80211_CMD_GET_MESH_CONFIG, 13559 .cmd = NL80211_CMD_GET_MESH_CONFIG,
13587 .doit = nl80211_get_mesh_config, 13560 .doit = nl80211_get_mesh_config,
13588 .policy = nl80211_policy,
13589 /* can be retrieved by unprivileged users */ 13561 /* can be retrieved by unprivileged users */
13590 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13562 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13591 NL80211_FLAG_NEED_RTNL, 13563 NL80211_FLAG_NEED_RTNL,
@@ -13593,7 +13565,6 @@ static const struct genl_ops nl80211_ops[] = {
13593 { 13565 {
13594 .cmd = NL80211_CMD_SET_MESH_CONFIG, 13566 .cmd = NL80211_CMD_SET_MESH_CONFIG,
13595 .doit = nl80211_update_mesh_config, 13567 .doit = nl80211_update_mesh_config,
13596 .policy = nl80211_policy,
13597 .flags = GENL_UNS_ADMIN_PERM, 13568 .flags = GENL_UNS_ADMIN_PERM,
13598 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13569 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13599 NL80211_FLAG_NEED_RTNL, 13570 NL80211_FLAG_NEED_RTNL,
@@ -13601,7 +13572,6 @@ static const struct genl_ops nl80211_ops[] = {
13601 { 13572 {
13602 .cmd = NL80211_CMD_TRIGGER_SCAN, 13573 .cmd = NL80211_CMD_TRIGGER_SCAN,
13603 .doit = nl80211_trigger_scan, 13574 .doit = nl80211_trigger_scan,
13604 .policy = nl80211_policy,
13605 .flags = GENL_UNS_ADMIN_PERM, 13575 .flags = GENL_UNS_ADMIN_PERM,
13606 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13576 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13607 NL80211_FLAG_NEED_RTNL, 13577 NL80211_FLAG_NEED_RTNL,
@@ -13609,20 +13579,17 @@ static const struct genl_ops nl80211_ops[] = {
13609 { 13579 {
13610 .cmd = NL80211_CMD_ABORT_SCAN, 13580 .cmd = NL80211_CMD_ABORT_SCAN,
13611 .doit = nl80211_abort_scan, 13581 .doit = nl80211_abort_scan,
13612 .policy = nl80211_policy,
13613 .flags = GENL_UNS_ADMIN_PERM, 13582 .flags = GENL_UNS_ADMIN_PERM,
13614 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13583 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13615 NL80211_FLAG_NEED_RTNL, 13584 NL80211_FLAG_NEED_RTNL,
13616 }, 13585 },
13617 { 13586 {
13618 .cmd = NL80211_CMD_GET_SCAN, 13587 .cmd = NL80211_CMD_GET_SCAN,
13619 .policy = nl80211_policy,
13620 .dumpit = nl80211_dump_scan, 13588 .dumpit = nl80211_dump_scan,
13621 }, 13589 },
13622 { 13590 {
13623 .cmd = NL80211_CMD_START_SCHED_SCAN, 13591 .cmd = NL80211_CMD_START_SCHED_SCAN,
13624 .doit = nl80211_start_sched_scan, 13592 .doit = nl80211_start_sched_scan,
13625 .policy = nl80211_policy,
13626 .flags = GENL_UNS_ADMIN_PERM, 13593 .flags = GENL_UNS_ADMIN_PERM,
13627 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13594 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13628 NL80211_FLAG_NEED_RTNL, 13595 NL80211_FLAG_NEED_RTNL,
@@ -13630,7 +13597,6 @@ static const struct genl_ops nl80211_ops[] = {
13630 { 13597 {
13631 .cmd = NL80211_CMD_STOP_SCHED_SCAN, 13598 .cmd = NL80211_CMD_STOP_SCHED_SCAN,
13632 .doit = nl80211_stop_sched_scan, 13599 .doit = nl80211_stop_sched_scan,
13633 .policy = nl80211_policy,
13634 .flags = GENL_UNS_ADMIN_PERM, 13600 .flags = GENL_UNS_ADMIN_PERM,
13635 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13601 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13636 NL80211_FLAG_NEED_RTNL, 13602 NL80211_FLAG_NEED_RTNL,
@@ -13638,7 +13604,6 @@ static const struct genl_ops nl80211_ops[] = {
13638 { 13604 {
13639 .cmd = NL80211_CMD_AUTHENTICATE, 13605 .cmd = NL80211_CMD_AUTHENTICATE,
13640 .doit = nl80211_authenticate, 13606 .doit = nl80211_authenticate,
13641 .policy = nl80211_policy,
13642 .flags = GENL_UNS_ADMIN_PERM, 13607 .flags = GENL_UNS_ADMIN_PERM,
13643 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13608 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13644 NL80211_FLAG_NEED_RTNL | 13609 NL80211_FLAG_NEED_RTNL |
@@ -13647,7 +13612,6 @@ static const struct genl_ops nl80211_ops[] = {
13647 { 13612 {
13648 .cmd = NL80211_CMD_ASSOCIATE, 13613 .cmd = NL80211_CMD_ASSOCIATE,
13649 .doit = nl80211_associate, 13614 .doit = nl80211_associate,
13650 .policy = nl80211_policy,
13651 .flags = GENL_UNS_ADMIN_PERM, 13615 .flags = GENL_UNS_ADMIN_PERM,
13652 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13616 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13653 NL80211_FLAG_NEED_RTNL, 13617 NL80211_FLAG_NEED_RTNL,
@@ -13655,7 +13619,6 @@ static const struct genl_ops nl80211_ops[] = {
13655 { 13619 {
13656 .cmd = NL80211_CMD_DEAUTHENTICATE, 13620 .cmd = NL80211_CMD_DEAUTHENTICATE,
13657 .doit = nl80211_deauthenticate, 13621 .doit = nl80211_deauthenticate,
13658 .policy = nl80211_policy,
13659 .flags = GENL_UNS_ADMIN_PERM, 13622 .flags = GENL_UNS_ADMIN_PERM,
13660 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13623 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13661 NL80211_FLAG_NEED_RTNL, 13624 NL80211_FLAG_NEED_RTNL,
@@ -13663,7 +13626,6 @@ static const struct genl_ops nl80211_ops[] = {
13663 { 13626 {
13664 .cmd = NL80211_CMD_DISASSOCIATE, 13627 .cmd = NL80211_CMD_DISASSOCIATE,
13665 .doit = nl80211_disassociate, 13628 .doit = nl80211_disassociate,
13666 .policy = nl80211_policy,
13667 .flags = GENL_UNS_ADMIN_PERM, 13629 .flags = GENL_UNS_ADMIN_PERM,
13668 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13630 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13669 NL80211_FLAG_NEED_RTNL, 13631 NL80211_FLAG_NEED_RTNL,
@@ -13671,7 +13633,6 @@ static const struct genl_ops nl80211_ops[] = {
13671 { 13633 {
13672 .cmd = NL80211_CMD_JOIN_IBSS, 13634 .cmd = NL80211_CMD_JOIN_IBSS,
13673 .doit = nl80211_join_ibss, 13635 .doit = nl80211_join_ibss,
13674 .policy = nl80211_policy,
13675 .flags = GENL_UNS_ADMIN_PERM, 13636 .flags = GENL_UNS_ADMIN_PERM,
13676 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13637 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13677 NL80211_FLAG_NEED_RTNL, 13638 NL80211_FLAG_NEED_RTNL,
@@ -13679,7 +13640,6 @@ static const struct genl_ops nl80211_ops[] = {
13679 { 13640 {
13680 .cmd = NL80211_CMD_LEAVE_IBSS, 13641 .cmd = NL80211_CMD_LEAVE_IBSS,
13681 .doit = nl80211_leave_ibss, 13642 .doit = nl80211_leave_ibss,
13682 .policy = nl80211_policy,
13683 .flags = GENL_UNS_ADMIN_PERM, 13643 .flags = GENL_UNS_ADMIN_PERM,
13684 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13644 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13685 NL80211_FLAG_NEED_RTNL, 13645 NL80211_FLAG_NEED_RTNL,
@@ -13689,7 +13649,6 @@ static const struct genl_ops nl80211_ops[] = {
13689 .cmd = NL80211_CMD_TESTMODE, 13649 .cmd = NL80211_CMD_TESTMODE,
13690 .doit = nl80211_testmode_do, 13650 .doit = nl80211_testmode_do,
13691 .dumpit = nl80211_testmode_dump, 13651 .dumpit = nl80211_testmode_dump,
13692 .policy = nl80211_policy,
13693 .flags = GENL_UNS_ADMIN_PERM, 13652 .flags = GENL_UNS_ADMIN_PERM,
13694 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13653 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13695 NL80211_FLAG_NEED_RTNL, 13654 NL80211_FLAG_NEED_RTNL,
@@ -13698,7 +13657,6 @@ static const struct genl_ops nl80211_ops[] = {
13698 { 13657 {
13699 .cmd = NL80211_CMD_CONNECT, 13658 .cmd = NL80211_CMD_CONNECT,
13700 .doit = nl80211_connect, 13659 .doit = nl80211_connect,
13701 .policy = nl80211_policy,
13702 .flags = GENL_UNS_ADMIN_PERM, 13660 .flags = GENL_UNS_ADMIN_PERM,
13703 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13661 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13704 NL80211_FLAG_NEED_RTNL, 13662 NL80211_FLAG_NEED_RTNL,
@@ -13706,7 +13664,6 @@ static const struct genl_ops nl80211_ops[] = {
13706 { 13664 {
13707 .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS, 13665 .cmd = NL80211_CMD_UPDATE_CONNECT_PARAMS,
13708 .doit = nl80211_update_connect_params, 13666 .doit = nl80211_update_connect_params,
13709 .policy = nl80211_policy,
13710 .flags = GENL_ADMIN_PERM, 13667 .flags = GENL_ADMIN_PERM,
13711 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13668 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13712 NL80211_FLAG_NEED_RTNL, 13669 NL80211_FLAG_NEED_RTNL,
@@ -13714,7 +13671,6 @@ static const struct genl_ops nl80211_ops[] = {
13714 { 13671 {
13715 .cmd = NL80211_CMD_DISCONNECT, 13672 .cmd = NL80211_CMD_DISCONNECT,
13716 .doit = nl80211_disconnect, 13673 .doit = nl80211_disconnect,
13717 .policy = nl80211_policy,
13718 .flags = GENL_UNS_ADMIN_PERM, 13674 .flags = GENL_UNS_ADMIN_PERM,
13719 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13675 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13720 NL80211_FLAG_NEED_RTNL, 13676 NL80211_FLAG_NEED_RTNL,
@@ -13722,20 +13678,17 @@ static const struct genl_ops nl80211_ops[] = {
13722 { 13678 {
13723 .cmd = NL80211_CMD_SET_WIPHY_NETNS, 13679 .cmd = NL80211_CMD_SET_WIPHY_NETNS,
13724 .doit = nl80211_wiphy_netns, 13680 .doit = nl80211_wiphy_netns,
13725 .policy = nl80211_policy,
13726 .flags = GENL_UNS_ADMIN_PERM, 13681 .flags = GENL_UNS_ADMIN_PERM,
13727 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13682 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13728 NL80211_FLAG_NEED_RTNL, 13683 NL80211_FLAG_NEED_RTNL,
13729 }, 13684 },
13730 { 13685 {
13731 .cmd = NL80211_CMD_GET_SURVEY, 13686 .cmd = NL80211_CMD_GET_SURVEY,
13732 .policy = nl80211_policy,
13733 .dumpit = nl80211_dump_survey, 13687 .dumpit = nl80211_dump_survey,
13734 }, 13688 },
13735 { 13689 {
13736 .cmd = NL80211_CMD_SET_PMKSA, 13690 .cmd = NL80211_CMD_SET_PMKSA,
13737 .doit = nl80211_setdel_pmksa, 13691 .doit = nl80211_setdel_pmksa,
13738 .policy = nl80211_policy,
13739 .flags = GENL_UNS_ADMIN_PERM, 13692 .flags = GENL_UNS_ADMIN_PERM,
13740 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13693 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13741 NL80211_FLAG_NEED_RTNL, 13694 NL80211_FLAG_NEED_RTNL,
@@ -13743,7 +13696,6 @@ static const struct genl_ops nl80211_ops[] = {
13743 { 13696 {
13744 .cmd = NL80211_CMD_DEL_PMKSA, 13697 .cmd = NL80211_CMD_DEL_PMKSA,
13745 .doit = nl80211_setdel_pmksa, 13698 .doit = nl80211_setdel_pmksa,
13746 .policy = nl80211_policy,
13747 .flags = GENL_UNS_ADMIN_PERM, 13699 .flags = GENL_UNS_ADMIN_PERM,
13748 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13700 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13749 NL80211_FLAG_NEED_RTNL, 13701 NL80211_FLAG_NEED_RTNL,
@@ -13751,7 +13703,6 @@ static const struct genl_ops nl80211_ops[] = {
13751 { 13703 {
13752 .cmd = NL80211_CMD_FLUSH_PMKSA, 13704 .cmd = NL80211_CMD_FLUSH_PMKSA,
13753 .doit = nl80211_flush_pmksa, 13705 .doit = nl80211_flush_pmksa,
13754 .policy = nl80211_policy,
13755 .flags = GENL_UNS_ADMIN_PERM, 13706 .flags = GENL_UNS_ADMIN_PERM,
13756 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13707 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13757 NL80211_FLAG_NEED_RTNL, 13708 NL80211_FLAG_NEED_RTNL,
@@ -13759,7 +13710,6 @@ static const struct genl_ops nl80211_ops[] = {
13759 { 13710 {
13760 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL, 13711 .cmd = NL80211_CMD_REMAIN_ON_CHANNEL,
13761 .doit = nl80211_remain_on_channel, 13712 .doit = nl80211_remain_on_channel,
13762 .policy = nl80211_policy,
13763 .flags = GENL_UNS_ADMIN_PERM, 13713 .flags = GENL_UNS_ADMIN_PERM,
13764 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13714 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13765 NL80211_FLAG_NEED_RTNL, 13715 NL80211_FLAG_NEED_RTNL,
@@ -13767,7 +13717,6 @@ static const struct genl_ops nl80211_ops[] = {
13767 { 13717 {
13768 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL, 13718 .cmd = NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL,
13769 .doit = nl80211_cancel_remain_on_channel, 13719 .doit = nl80211_cancel_remain_on_channel,
13770 .policy = nl80211_policy,
13771 .flags = GENL_UNS_ADMIN_PERM, 13720 .flags = GENL_UNS_ADMIN_PERM,
13772 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13721 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13773 NL80211_FLAG_NEED_RTNL, 13722 NL80211_FLAG_NEED_RTNL,
@@ -13775,7 +13724,6 @@ static const struct genl_ops nl80211_ops[] = {
13775 { 13724 {
13776 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK, 13725 .cmd = NL80211_CMD_SET_TX_BITRATE_MASK,
13777 .doit = nl80211_set_tx_bitrate_mask, 13726 .doit = nl80211_set_tx_bitrate_mask,
13778 .policy = nl80211_policy,
13779 .flags = GENL_UNS_ADMIN_PERM, 13727 .flags = GENL_UNS_ADMIN_PERM,
13780 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13728 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13781 NL80211_FLAG_NEED_RTNL, 13729 NL80211_FLAG_NEED_RTNL,
@@ -13783,7 +13731,6 @@ static const struct genl_ops nl80211_ops[] = {
13783 { 13731 {
13784 .cmd = NL80211_CMD_REGISTER_FRAME, 13732 .cmd = NL80211_CMD_REGISTER_FRAME,
13785 .doit = nl80211_register_mgmt, 13733 .doit = nl80211_register_mgmt,
13786 .policy = nl80211_policy,
13787 .flags = GENL_UNS_ADMIN_PERM, 13734 .flags = GENL_UNS_ADMIN_PERM,
13788 .internal_flags = NL80211_FLAG_NEED_WDEV | 13735 .internal_flags = NL80211_FLAG_NEED_WDEV |
13789 NL80211_FLAG_NEED_RTNL, 13736 NL80211_FLAG_NEED_RTNL,
@@ -13791,7 +13738,6 @@ static const struct genl_ops nl80211_ops[] = {
13791 { 13738 {
13792 .cmd = NL80211_CMD_FRAME, 13739 .cmd = NL80211_CMD_FRAME,
13793 .doit = nl80211_tx_mgmt, 13740 .doit = nl80211_tx_mgmt,
13794 .policy = nl80211_policy,
13795 .flags = GENL_UNS_ADMIN_PERM, 13741 .flags = GENL_UNS_ADMIN_PERM,
13796 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13742 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13797 NL80211_FLAG_NEED_RTNL, 13743 NL80211_FLAG_NEED_RTNL,
@@ -13799,7 +13745,6 @@ static const struct genl_ops nl80211_ops[] = {
13799 { 13745 {
13800 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL, 13746 .cmd = NL80211_CMD_FRAME_WAIT_CANCEL,
13801 .doit = nl80211_tx_mgmt_cancel_wait, 13747 .doit = nl80211_tx_mgmt_cancel_wait,
13802 .policy = nl80211_policy,
13803 .flags = GENL_UNS_ADMIN_PERM, 13748 .flags = GENL_UNS_ADMIN_PERM,
13804 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13749 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13805 NL80211_FLAG_NEED_RTNL, 13750 NL80211_FLAG_NEED_RTNL,
@@ -13807,7 +13752,6 @@ static const struct genl_ops nl80211_ops[] = {
13807 { 13752 {
13808 .cmd = NL80211_CMD_SET_POWER_SAVE, 13753 .cmd = NL80211_CMD_SET_POWER_SAVE,
13809 .doit = nl80211_set_power_save, 13754 .doit = nl80211_set_power_save,
13810 .policy = nl80211_policy,
13811 .flags = GENL_UNS_ADMIN_PERM, 13755 .flags = GENL_UNS_ADMIN_PERM,
13812 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13756 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13813 NL80211_FLAG_NEED_RTNL, 13757 NL80211_FLAG_NEED_RTNL,
@@ -13815,7 +13759,6 @@ static const struct genl_ops nl80211_ops[] = {
13815 { 13759 {
13816 .cmd = NL80211_CMD_GET_POWER_SAVE, 13760 .cmd = NL80211_CMD_GET_POWER_SAVE,
13817 .doit = nl80211_get_power_save, 13761 .doit = nl80211_get_power_save,
13818 .policy = nl80211_policy,
13819 /* can be retrieved by unprivileged users */ 13762 /* can be retrieved by unprivileged users */
13820 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13763 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13821 NL80211_FLAG_NEED_RTNL, 13764 NL80211_FLAG_NEED_RTNL,
@@ -13823,7 +13766,6 @@ static const struct genl_ops nl80211_ops[] = {
13823 { 13766 {
13824 .cmd = NL80211_CMD_SET_CQM, 13767 .cmd = NL80211_CMD_SET_CQM,
13825 .doit = nl80211_set_cqm, 13768 .doit = nl80211_set_cqm,
13826 .policy = nl80211_policy,
13827 .flags = GENL_UNS_ADMIN_PERM, 13769 .flags = GENL_UNS_ADMIN_PERM,
13828 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13770 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13829 NL80211_FLAG_NEED_RTNL, 13771 NL80211_FLAG_NEED_RTNL,
@@ -13831,7 +13773,6 @@ static const struct genl_ops nl80211_ops[] = {
13831 { 13773 {
13832 .cmd = NL80211_CMD_SET_CHANNEL, 13774 .cmd = NL80211_CMD_SET_CHANNEL,
13833 .doit = nl80211_set_channel, 13775 .doit = nl80211_set_channel,
13834 .policy = nl80211_policy,
13835 .flags = GENL_UNS_ADMIN_PERM, 13776 .flags = GENL_UNS_ADMIN_PERM,
13836 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13777 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13837 NL80211_FLAG_NEED_RTNL, 13778 NL80211_FLAG_NEED_RTNL,
@@ -13839,7 +13780,6 @@ static const struct genl_ops nl80211_ops[] = {
13839 { 13780 {
13840 .cmd = NL80211_CMD_SET_WDS_PEER, 13781 .cmd = NL80211_CMD_SET_WDS_PEER,
13841 .doit = nl80211_set_wds_peer, 13782 .doit = nl80211_set_wds_peer,
13842 .policy = nl80211_policy,
13843 .flags = GENL_UNS_ADMIN_PERM, 13783 .flags = GENL_UNS_ADMIN_PERM,
13844 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13784 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13845 NL80211_FLAG_NEED_RTNL, 13785 NL80211_FLAG_NEED_RTNL,
@@ -13847,7 +13787,6 @@ static const struct genl_ops nl80211_ops[] = {
13847 { 13787 {
13848 .cmd = NL80211_CMD_JOIN_MESH, 13788 .cmd = NL80211_CMD_JOIN_MESH,
13849 .doit = nl80211_join_mesh, 13789 .doit = nl80211_join_mesh,
13850 .policy = nl80211_policy,
13851 .flags = GENL_UNS_ADMIN_PERM, 13790 .flags = GENL_UNS_ADMIN_PERM,
13852 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13791 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13853 NL80211_FLAG_NEED_RTNL, 13792 NL80211_FLAG_NEED_RTNL,
@@ -13855,7 +13794,6 @@ static const struct genl_ops nl80211_ops[] = {
13855 { 13794 {
13856 .cmd = NL80211_CMD_LEAVE_MESH, 13795 .cmd = NL80211_CMD_LEAVE_MESH,
13857 .doit = nl80211_leave_mesh, 13796 .doit = nl80211_leave_mesh,
13858 .policy = nl80211_policy,
13859 .flags = GENL_UNS_ADMIN_PERM, 13797 .flags = GENL_UNS_ADMIN_PERM,
13860 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13798 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13861 NL80211_FLAG_NEED_RTNL, 13799 NL80211_FLAG_NEED_RTNL,
@@ -13863,7 +13801,6 @@ static const struct genl_ops nl80211_ops[] = {
13863 { 13801 {
13864 .cmd = NL80211_CMD_JOIN_OCB, 13802 .cmd = NL80211_CMD_JOIN_OCB,
13865 .doit = nl80211_join_ocb, 13803 .doit = nl80211_join_ocb,
13866 .policy = nl80211_policy,
13867 .flags = GENL_UNS_ADMIN_PERM, 13804 .flags = GENL_UNS_ADMIN_PERM,
13868 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13805 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13869 NL80211_FLAG_NEED_RTNL, 13806 NL80211_FLAG_NEED_RTNL,
@@ -13871,7 +13808,6 @@ static const struct genl_ops nl80211_ops[] = {
13871 { 13808 {
13872 .cmd = NL80211_CMD_LEAVE_OCB, 13809 .cmd = NL80211_CMD_LEAVE_OCB,
13873 .doit = nl80211_leave_ocb, 13810 .doit = nl80211_leave_ocb,
13874 .policy = nl80211_policy,
13875 .flags = GENL_UNS_ADMIN_PERM, 13811 .flags = GENL_UNS_ADMIN_PERM,
13876 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13812 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13877 NL80211_FLAG_NEED_RTNL, 13813 NL80211_FLAG_NEED_RTNL,
@@ -13880,7 +13816,6 @@ static const struct genl_ops nl80211_ops[] = {
13880 { 13816 {
13881 .cmd = NL80211_CMD_GET_WOWLAN, 13817 .cmd = NL80211_CMD_GET_WOWLAN,
13882 .doit = nl80211_get_wowlan, 13818 .doit = nl80211_get_wowlan,
13883 .policy = nl80211_policy,
13884 /* can be retrieved by unprivileged users */ 13819 /* can be retrieved by unprivileged users */
13885 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13820 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13886 NL80211_FLAG_NEED_RTNL, 13821 NL80211_FLAG_NEED_RTNL,
@@ -13888,7 +13823,6 @@ static const struct genl_ops nl80211_ops[] = {
13888 { 13823 {
13889 .cmd = NL80211_CMD_SET_WOWLAN, 13824 .cmd = NL80211_CMD_SET_WOWLAN,
13890 .doit = nl80211_set_wowlan, 13825 .doit = nl80211_set_wowlan,
13891 .policy = nl80211_policy,
13892 .flags = GENL_UNS_ADMIN_PERM, 13826 .flags = GENL_UNS_ADMIN_PERM,
13893 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13827 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13894 NL80211_FLAG_NEED_RTNL, 13828 NL80211_FLAG_NEED_RTNL,
@@ -13897,7 +13831,6 @@ static const struct genl_ops nl80211_ops[] = {
13897 { 13831 {
13898 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD, 13832 .cmd = NL80211_CMD_SET_REKEY_OFFLOAD,
13899 .doit = nl80211_set_rekey_data, 13833 .doit = nl80211_set_rekey_data,
13900 .policy = nl80211_policy,
13901 .flags = GENL_UNS_ADMIN_PERM, 13834 .flags = GENL_UNS_ADMIN_PERM,
13902 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13835 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13903 NL80211_FLAG_NEED_RTNL | 13836 NL80211_FLAG_NEED_RTNL |
@@ -13906,7 +13839,6 @@ static const struct genl_ops nl80211_ops[] = {
13906 { 13839 {
13907 .cmd = NL80211_CMD_TDLS_MGMT, 13840 .cmd = NL80211_CMD_TDLS_MGMT,
13908 .doit = nl80211_tdls_mgmt, 13841 .doit = nl80211_tdls_mgmt,
13909 .policy = nl80211_policy,
13910 .flags = GENL_UNS_ADMIN_PERM, 13842 .flags = GENL_UNS_ADMIN_PERM,
13911 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13843 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13912 NL80211_FLAG_NEED_RTNL, 13844 NL80211_FLAG_NEED_RTNL,
@@ -13914,7 +13846,6 @@ static const struct genl_ops nl80211_ops[] = {
13914 { 13846 {
13915 .cmd = NL80211_CMD_TDLS_OPER, 13847 .cmd = NL80211_CMD_TDLS_OPER,
13916 .doit = nl80211_tdls_oper, 13848 .doit = nl80211_tdls_oper,
13917 .policy = nl80211_policy,
13918 .flags = GENL_UNS_ADMIN_PERM, 13849 .flags = GENL_UNS_ADMIN_PERM,
13919 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13850 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13920 NL80211_FLAG_NEED_RTNL, 13851 NL80211_FLAG_NEED_RTNL,
@@ -13922,7 +13853,6 @@ static const struct genl_ops nl80211_ops[] = {
13922 { 13853 {
13923 .cmd = NL80211_CMD_UNEXPECTED_FRAME, 13854 .cmd = NL80211_CMD_UNEXPECTED_FRAME,
13924 .doit = nl80211_register_unexpected_frame, 13855 .doit = nl80211_register_unexpected_frame,
13925 .policy = nl80211_policy,
13926 .flags = GENL_UNS_ADMIN_PERM, 13856 .flags = GENL_UNS_ADMIN_PERM,
13927 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13857 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13928 NL80211_FLAG_NEED_RTNL, 13858 NL80211_FLAG_NEED_RTNL,
@@ -13930,7 +13860,6 @@ static const struct genl_ops nl80211_ops[] = {
13930 { 13860 {
13931 .cmd = NL80211_CMD_PROBE_CLIENT, 13861 .cmd = NL80211_CMD_PROBE_CLIENT,
13932 .doit = nl80211_probe_client, 13862 .doit = nl80211_probe_client,
13933 .policy = nl80211_policy,
13934 .flags = GENL_UNS_ADMIN_PERM, 13863 .flags = GENL_UNS_ADMIN_PERM,
13935 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13864 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
13936 NL80211_FLAG_NEED_RTNL, 13865 NL80211_FLAG_NEED_RTNL,
@@ -13938,7 +13867,6 @@ static const struct genl_ops nl80211_ops[] = {
13938 { 13867 {
13939 .cmd = NL80211_CMD_REGISTER_BEACONS, 13868 .cmd = NL80211_CMD_REGISTER_BEACONS,
13940 .doit = nl80211_register_beacons, 13869 .doit = nl80211_register_beacons,
13941 .policy = nl80211_policy,
13942 .flags = GENL_UNS_ADMIN_PERM, 13870 .flags = GENL_UNS_ADMIN_PERM,
13943 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13871 .internal_flags = NL80211_FLAG_NEED_WIPHY |
13944 NL80211_FLAG_NEED_RTNL, 13872 NL80211_FLAG_NEED_RTNL,
@@ -13946,7 +13874,6 @@ static const struct genl_ops nl80211_ops[] = {
13946 { 13874 {
13947 .cmd = NL80211_CMD_SET_NOACK_MAP, 13875 .cmd = NL80211_CMD_SET_NOACK_MAP,
13948 .doit = nl80211_set_noack_map, 13876 .doit = nl80211_set_noack_map,
13949 .policy = nl80211_policy,
13950 .flags = GENL_UNS_ADMIN_PERM, 13877 .flags = GENL_UNS_ADMIN_PERM,
13951 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13878 .internal_flags = NL80211_FLAG_NEED_NETDEV |
13952 NL80211_FLAG_NEED_RTNL, 13879 NL80211_FLAG_NEED_RTNL,
@@ -13954,7 +13881,6 @@ static const struct genl_ops nl80211_ops[] = {
13954 { 13881 {
13955 .cmd = NL80211_CMD_START_P2P_DEVICE, 13882 .cmd = NL80211_CMD_START_P2P_DEVICE,
13956 .doit = nl80211_start_p2p_device, 13883 .doit = nl80211_start_p2p_device,
13957 .policy = nl80211_policy,
13958 .flags = GENL_UNS_ADMIN_PERM, 13884 .flags = GENL_UNS_ADMIN_PERM,
13959 .internal_flags = NL80211_FLAG_NEED_WDEV | 13885 .internal_flags = NL80211_FLAG_NEED_WDEV |
13960 NL80211_FLAG_NEED_RTNL, 13886 NL80211_FLAG_NEED_RTNL,
@@ -13962,7 +13888,6 @@ static const struct genl_ops nl80211_ops[] = {
13962 { 13888 {
13963 .cmd = NL80211_CMD_STOP_P2P_DEVICE, 13889 .cmd = NL80211_CMD_STOP_P2P_DEVICE,
13964 .doit = nl80211_stop_p2p_device, 13890 .doit = nl80211_stop_p2p_device,
13965 .policy = nl80211_policy,
13966 .flags = GENL_UNS_ADMIN_PERM, 13891 .flags = GENL_UNS_ADMIN_PERM,
13967 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13892 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13968 NL80211_FLAG_NEED_RTNL, 13893 NL80211_FLAG_NEED_RTNL,
@@ -13970,7 +13895,6 @@ static const struct genl_ops nl80211_ops[] = {
13970 { 13895 {
13971 .cmd = NL80211_CMD_START_NAN, 13896 .cmd = NL80211_CMD_START_NAN,
13972 .doit = nl80211_start_nan, 13897 .doit = nl80211_start_nan,
13973 .policy = nl80211_policy,
13974 .flags = GENL_ADMIN_PERM, 13898 .flags = GENL_ADMIN_PERM,
13975 .internal_flags = NL80211_FLAG_NEED_WDEV | 13899 .internal_flags = NL80211_FLAG_NEED_WDEV |
13976 NL80211_FLAG_NEED_RTNL, 13900 NL80211_FLAG_NEED_RTNL,
@@ -13978,7 +13902,6 @@ static const struct genl_ops nl80211_ops[] = {
13978 { 13902 {
13979 .cmd = NL80211_CMD_STOP_NAN, 13903 .cmd = NL80211_CMD_STOP_NAN,
13980 .doit = nl80211_stop_nan, 13904 .doit = nl80211_stop_nan,
13981 .policy = nl80211_policy,
13982 .flags = GENL_ADMIN_PERM, 13905 .flags = GENL_ADMIN_PERM,
13983 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13906 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13984 NL80211_FLAG_NEED_RTNL, 13907 NL80211_FLAG_NEED_RTNL,
@@ -13986,7 +13909,6 @@ static const struct genl_ops nl80211_ops[] = {
13986 { 13909 {
13987 .cmd = NL80211_CMD_ADD_NAN_FUNCTION, 13910 .cmd = NL80211_CMD_ADD_NAN_FUNCTION,
13988 .doit = nl80211_nan_add_func, 13911 .doit = nl80211_nan_add_func,
13989 .policy = nl80211_policy,
13990 .flags = GENL_ADMIN_PERM, 13912 .flags = GENL_ADMIN_PERM,
13991 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13913 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
13992 NL80211_FLAG_NEED_RTNL, 13914 NL80211_FLAG_NEED_RTNL,
@@ -13994,7 +13916,6 @@ static const struct genl_ops nl80211_ops[] = {
13994 { 13916 {
13995 .cmd = NL80211_CMD_DEL_NAN_FUNCTION, 13917 .cmd = NL80211_CMD_DEL_NAN_FUNCTION,
13996 .doit = nl80211_nan_del_func, 13918 .doit = nl80211_nan_del_func,
13997 .policy = nl80211_policy,
13998 .flags = GENL_ADMIN_PERM, 13919 .flags = GENL_ADMIN_PERM,
13999 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13920 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
14000 NL80211_FLAG_NEED_RTNL, 13921 NL80211_FLAG_NEED_RTNL,
@@ -14002,7 +13923,6 @@ static const struct genl_ops nl80211_ops[] = {
14002 { 13923 {
14003 .cmd = NL80211_CMD_CHANGE_NAN_CONFIG, 13924 .cmd = NL80211_CMD_CHANGE_NAN_CONFIG,
14004 .doit = nl80211_nan_change_config, 13925 .doit = nl80211_nan_change_config,
14005 .policy = nl80211_policy,
14006 .flags = GENL_ADMIN_PERM, 13926 .flags = GENL_ADMIN_PERM,
14007 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13927 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
14008 NL80211_FLAG_NEED_RTNL, 13928 NL80211_FLAG_NEED_RTNL,
@@ -14010,7 +13930,6 @@ static const struct genl_ops nl80211_ops[] = {
14010 { 13930 {
14011 .cmd = NL80211_CMD_SET_MCAST_RATE, 13931 .cmd = NL80211_CMD_SET_MCAST_RATE,
14012 .doit = nl80211_set_mcast_rate, 13932 .doit = nl80211_set_mcast_rate,
14013 .policy = nl80211_policy,
14014 .flags = GENL_UNS_ADMIN_PERM, 13933 .flags = GENL_UNS_ADMIN_PERM,
14015 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13934 .internal_flags = NL80211_FLAG_NEED_NETDEV |
14016 NL80211_FLAG_NEED_RTNL, 13935 NL80211_FLAG_NEED_RTNL,
@@ -14018,7 +13937,6 @@ static const struct genl_ops nl80211_ops[] = {
14018 { 13937 {
14019 .cmd = NL80211_CMD_SET_MAC_ACL, 13938 .cmd = NL80211_CMD_SET_MAC_ACL,
14020 .doit = nl80211_set_mac_acl, 13939 .doit = nl80211_set_mac_acl,
14021 .policy = nl80211_policy,
14022 .flags = GENL_UNS_ADMIN_PERM, 13940 .flags = GENL_UNS_ADMIN_PERM,
14023 .internal_flags = NL80211_FLAG_NEED_NETDEV | 13941 .internal_flags = NL80211_FLAG_NEED_NETDEV |
14024 NL80211_FLAG_NEED_RTNL, 13942 NL80211_FLAG_NEED_RTNL,
@@ -14026,7 +13944,6 @@ static const struct genl_ops nl80211_ops[] = {
14026 { 13944 {
14027 .cmd = NL80211_CMD_RADAR_DETECT, 13945 .cmd = NL80211_CMD_RADAR_DETECT,
14028 .doit = nl80211_start_radar_detection, 13946 .doit = nl80211_start_radar_detection,
14029 .policy = nl80211_policy,
14030 .flags = GENL_UNS_ADMIN_PERM, 13947 .flags = GENL_UNS_ADMIN_PERM,
14031 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13948 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14032 NL80211_FLAG_NEED_RTNL, 13949 NL80211_FLAG_NEED_RTNL,
@@ -14034,12 +13951,10 @@ static const struct genl_ops nl80211_ops[] = {
14034 { 13951 {
14035 .cmd = NL80211_CMD_GET_PROTOCOL_FEATURES, 13952 .cmd = NL80211_CMD_GET_PROTOCOL_FEATURES,
14036 .doit = nl80211_get_protocol_features, 13953 .doit = nl80211_get_protocol_features,
14037 .policy = nl80211_policy,
14038 }, 13954 },
14039 { 13955 {
14040 .cmd = NL80211_CMD_UPDATE_FT_IES, 13956 .cmd = NL80211_CMD_UPDATE_FT_IES,
14041 .doit = nl80211_update_ft_ies, 13957 .doit = nl80211_update_ft_ies,
14042 .policy = nl80211_policy,
14043 .flags = GENL_UNS_ADMIN_PERM, 13958 .flags = GENL_UNS_ADMIN_PERM,
14044 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13959 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14045 NL80211_FLAG_NEED_RTNL, 13960 NL80211_FLAG_NEED_RTNL,
@@ -14047,7 +13962,6 @@ static const struct genl_ops nl80211_ops[] = {
14047 { 13962 {
14048 .cmd = NL80211_CMD_CRIT_PROTOCOL_START, 13963 .cmd = NL80211_CMD_CRIT_PROTOCOL_START,
14049 .doit = nl80211_crit_protocol_start, 13964 .doit = nl80211_crit_protocol_start,
14050 .policy = nl80211_policy,
14051 .flags = GENL_UNS_ADMIN_PERM, 13965 .flags = GENL_UNS_ADMIN_PERM,
14052 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13966 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
14053 NL80211_FLAG_NEED_RTNL, 13967 NL80211_FLAG_NEED_RTNL,
@@ -14055,7 +13969,6 @@ static const struct genl_ops nl80211_ops[] = {
14055 { 13969 {
14056 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP, 13970 .cmd = NL80211_CMD_CRIT_PROTOCOL_STOP,
14057 .doit = nl80211_crit_protocol_stop, 13971 .doit = nl80211_crit_protocol_stop,
14058 .policy = nl80211_policy,
14059 .flags = GENL_UNS_ADMIN_PERM, 13972 .flags = GENL_UNS_ADMIN_PERM,
14060 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 13973 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
14061 NL80211_FLAG_NEED_RTNL, 13974 NL80211_FLAG_NEED_RTNL,
@@ -14063,14 +13976,12 @@ static const struct genl_ops nl80211_ops[] = {
14063 { 13976 {
14064 .cmd = NL80211_CMD_GET_COALESCE, 13977 .cmd = NL80211_CMD_GET_COALESCE,
14065 .doit = nl80211_get_coalesce, 13978 .doit = nl80211_get_coalesce,
14066 .policy = nl80211_policy,
14067 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13979 .internal_flags = NL80211_FLAG_NEED_WIPHY |
14068 NL80211_FLAG_NEED_RTNL, 13980 NL80211_FLAG_NEED_RTNL,
14069 }, 13981 },
14070 { 13982 {
14071 .cmd = NL80211_CMD_SET_COALESCE, 13983 .cmd = NL80211_CMD_SET_COALESCE,
14072 .doit = nl80211_set_coalesce, 13984 .doit = nl80211_set_coalesce,
14073 .policy = nl80211_policy,
14074 .flags = GENL_UNS_ADMIN_PERM, 13985 .flags = GENL_UNS_ADMIN_PERM,
14075 .internal_flags = NL80211_FLAG_NEED_WIPHY | 13986 .internal_flags = NL80211_FLAG_NEED_WIPHY |
14076 NL80211_FLAG_NEED_RTNL, 13987 NL80211_FLAG_NEED_RTNL,
@@ -14078,7 +13989,6 @@ static const struct genl_ops nl80211_ops[] = {
14078 { 13989 {
14079 .cmd = NL80211_CMD_CHANNEL_SWITCH, 13990 .cmd = NL80211_CMD_CHANNEL_SWITCH,
14080 .doit = nl80211_channel_switch, 13991 .doit = nl80211_channel_switch,
14081 .policy = nl80211_policy,
14082 .flags = GENL_UNS_ADMIN_PERM, 13992 .flags = GENL_UNS_ADMIN_PERM,
14083 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 13993 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14084 NL80211_FLAG_NEED_RTNL, 13994 NL80211_FLAG_NEED_RTNL,
@@ -14087,7 +13997,6 @@ static const struct genl_ops nl80211_ops[] = {
14087 .cmd = NL80211_CMD_VENDOR, 13997 .cmd = NL80211_CMD_VENDOR,
14088 .doit = nl80211_vendor_cmd, 13998 .doit = nl80211_vendor_cmd,
14089 .dumpit = nl80211_vendor_cmd_dump, 13999 .dumpit = nl80211_vendor_cmd_dump,
14090 .policy = nl80211_policy,
14091 .flags = GENL_UNS_ADMIN_PERM, 14000 .flags = GENL_UNS_ADMIN_PERM,
14092 .internal_flags = NL80211_FLAG_NEED_WIPHY | 14001 .internal_flags = NL80211_FLAG_NEED_WIPHY |
14093 NL80211_FLAG_NEED_RTNL, 14002 NL80211_FLAG_NEED_RTNL,
@@ -14095,7 +14004,6 @@ static const struct genl_ops nl80211_ops[] = {
14095 { 14004 {
14096 .cmd = NL80211_CMD_SET_QOS_MAP, 14005 .cmd = NL80211_CMD_SET_QOS_MAP,
14097 .doit = nl80211_set_qos_map, 14006 .doit = nl80211_set_qos_map,
14098 .policy = nl80211_policy,
14099 .flags = GENL_UNS_ADMIN_PERM, 14007 .flags = GENL_UNS_ADMIN_PERM,
14100 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14008 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14101 NL80211_FLAG_NEED_RTNL, 14009 NL80211_FLAG_NEED_RTNL,
@@ -14103,7 +14011,6 @@ static const struct genl_ops nl80211_ops[] = {
14103 { 14011 {
14104 .cmd = NL80211_CMD_ADD_TX_TS, 14012 .cmd = NL80211_CMD_ADD_TX_TS,
14105 .doit = nl80211_add_tx_ts, 14013 .doit = nl80211_add_tx_ts,
14106 .policy = nl80211_policy,
14107 .flags = GENL_UNS_ADMIN_PERM, 14014 .flags = GENL_UNS_ADMIN_PERM,
14108 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14015 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14109 NL80211_FLAG_NEED_RTNL, 14016 NL80211_FLAG_NEED_RTNL,
@@ -14111,7 +14018,6 @@ static const struct genl_ops nl80211_ops[] = {
14111 { 14018 {
14112 .cmd = NL80211_CMD_DEL_TX_TS, 14019 .cmd = NL80211_CMD_DEL_TX_TS,
14113 .doit = nl80211_del_tx_ts, 14020 .doit = nl80211_del_tx_ts,
14114 .policy = nl80211_policy,
14115 .flags = GENL_UNS_ADMIN_PERM, 14021 .flags = GENL_UNS_ADMIN_PERM,
14116 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14022 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14117 NL80211_FLAG_NEED_RTNL, 14023 NL80211_FLAG_NEED_RTNL,
@@ -14119,7 +14025,6 @@ static const struct genl_ops nl80211_ops[] = {
14119 { 14025 {
14120 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH, 14026 .cmd = NL80211_CMD_TDLS_CHANNEL_SWITCH,
14121 .doit = nl80211_tdls_channel_switch, 14027 .doit = nl80211_tdls_channel_switch,
14122 .policy = nl80211_policy,
14123 .flags = GENL_UNS_ADMIN_PERM, 14028 .flags = GENL_UNS_ADMIN_PERM,
14124 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14029 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14125 NL80211_FLAG_NEED_RTNL, 14030 NL80211_FLAG_NEED_RTNL,
@@ -14127,7 +14032,6 @@ static const struct genl_ops nl80211_ops[] = {
14127 { 14032 {
14128 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH, 14033 .cmd = NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH,
14129 .doit = nl80211_tdls_cancel_channel_switch, 14034 .doit = nl80211_tdls_cancel_channel_switch,
14130 .policy = nl80211_policy,
14131 .flags = GENL_UNS_ADMIN_PERM, 14035 .flags = GENL_UNS_ADMIN_PERM,
14132 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14036 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14133 NL80211_FLAG_NEED_RTNL, 14037 NL80211_FLAG_NEED_RTNL,
@@ -14135,7 +14039,6 @@ static const struct genl_ops nl80211_ops[] = {
14135 { 14039 {
14136 .cmd = NL80211_CMD_SET_MULTICAST_TO_UNICAST, 14040 .cmd = NL80211_CMD_SET_MULTICAST_TO_UNICAST,
14137 .doit = nl80211_set_multicast_to_unicast, 14041 .doit = nl80211_set_multicast_to_unicast,
14138 .policy = nl80211_policy,
14139 .flags = GENL_UNS_ADMIN_PERM, 14042 .flags = GENL_UNS_ADMIN_PERM,
14140 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14043 .internal_flags = NL80211_FLAG_NEED_NETDEV |
14141 NL80211_FLAG_NEED_RTNL, 14044 NL80211_FLAG_NEED_RTNL,
@@ -14143,21 +14046,18 @@ static const struct genl_ops nl80211_ops[] = {
14143 { 14046 {
14144 .cmd = NL80211_CMD_SET_PMK, 14047 .cmd = NL80211_CMD_SET_PMK,
14145 .doit = nl80211_set_pmk, 14048 .doit = nl80211_set_pmk,
14146 .policy = nl80211_policy,
14147 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14049 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14148 NL80211_FLAG_NEED_RTNL, 14050 NL80211_FLAG_NEED_RTNL,
14149 }, 14051 },
14150 { 14052 {
14151 .cmd = NL80211_CMD_DEL_PMK, 14053 .cmd = NL80211_CMD_DEL_PMK,
14152 .doit = nl80211_del_pmk, 14054 .doit = nl80211_del_pmk,
14153 .policy = nl80211_policy,
14154 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14055 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14155 NL80211_FLAG_NEED_RTNL, 14056 NL80211_FLAG_NEED_RTNL,
14156 }, 14057 },
14157 { 14058 {
14158 .cmd = NL80211_CMD_EXTERNAL_AUTH, 14059 .cmd = NL80211_CMD_EXTERNAL_AUTH,
14159 .doit = nl80211_external_auth, 14060 .doit = nl80211_external_auth,
14160 .policy = nl80211_policy,
14161 .flags = GENL_ADMIN_PERM, 14061 .flags = GENL_ADMIN_PERM,
14162 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14062 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14163 NL80211_FLAG_NEED_RTNL, 14063 NL80211_FLAG_NEED_RTNL,
@@ -14165,7 +14065,6 @@ static const struct genl_ops nl80211_ops[] = {
14165 { 14065 {
14166 .cmd = NL80211_CMD_CONTROL_PORT_FRAME, 14066 .cmd = NL80211_CMD_CONTROL_PORT_FRAME,
14167 .doit = nl80211_tx_control_port, 14067 .doit = nl80211_tx_control_port,
14168 .policy = nl80211_policy,
14169 .flags = GENL_UNS_ADMIN_PERM, 14068 .flags = GENL_UNS_ADMIN_PERM,
14170 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14069 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14171 NL80211_FLAG_NEED_RTNL, 14070 NL80211_FLAG_NEED_RTNL,
@@ -14173,14 +14072,12 @@ static const struct genl_ops nl80211_ops[] = {
14173 { 14072 {
14174 .cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS, 14073 .cmd = NL80211_CMD_GET_FTM_RESPONDER_STATS,
14175 .doit = nl80211_get_ftm_responder_stats, 14074 .doit = nl80211_get_ftm_responder_stats,
14176 .policy = nl80211_policy,
14177 .internal_flags = NL80211_FLAG_NEED_NETDEV | 14075 .internal_flags = NL80211_FLAG_NEED_NETDEV |
14178 NL80211_FLAG_NEED_RTNL, 14076 NL80211_FLAG_NEED_RTNL,
14179 }, 14077 },
14180 { 14078 {
14181 .cmd = NL80211_CMD_PEER_MEASUREMENT_START, 14079 .cmd = NL80211_CMD_PEER_MEASUREMENT_START,
14182 .doit = nl80211_pmsr_start, 14080 .doit = nl80211_pmsr_start,
14183 .policy = nl80211_policy,
14184 .flags = GENL_UNS_ADMIN_PERM, 14081 .flags = GENL_UNS_ADMIN_PERM,
14185 .internal_flags = NL80211_FLAG_NEED_WDEV_UP | 14082 .internal_flags = NL80211_FLAG_NEED_WDEV_UP |
14186 NL80211_FLAG_NEED_RTNL, 14083 NL80211_FLAG_NEED_RTNL,
@@ -14188,7 +14085,6 @@ static const struct genl_ops nl80211_ops[] = {
14188 { 14085 {
14189 .cmd = NL80211_CMD_NOTIFY_RADAR, 14086 .cmd = NL80211_CMD_NOTIFY_RADAR,
14190 .doit = nl80211_notify_radar_detection, 14087 .doit = nl80211_notify_radar_detection,
14191 .policy = nl80211_policy,
14192 .flags = GENL_UNS_ADMIN_PERM, 14088 .flags = GENL_UNS_ADMIN_PERM,
14193 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | 14089 .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
14194 NL80211_FLAG_NEED_RTNL, 14090 NL80211_FLAG_NEED_RTNL,
@@ -14200,6 +14096,7 @@ static struct genl_family nl80211_fam __ro_after_init = {
14200 .hdrsize = 0, /* no private header */ 14096 .hdrsize = 0, /* no private header */
14201 .version = 1, /* no particular meaning now */ 14097 .version = 1, /* no particular meaning now */
14202 .maxattr = NL80211_ATTR_MAX, 14098 .maxattr = NL80211_ATTR_MAX,
14099 .policy = nl80211_policy,
14203 .netnsok = true, 14100 .netnsok = true,
14204 .pre_doit = nl80211_pre_doit, 14101 .pre_doit = nl80211_pre_doit,
14205 .post_doit = nl80211_post_doit, 14102 .post_doit = nl80211_post_doit,