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