netkit: Simplify netkit mode over to use NLA_POLICY_MAX
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 4 Oct 2024 10:13:32 +0000 (12:13 +0200)
committerMartin KaFai Lau <martin.lau@kernel.org>
Tue, 8 Oct 2024 00:12:37 +0000 (17:12 -0700)
Jakub suggested to rely on netlink policy validation via NLA_POLICY_MAX()
instead of open-coding it. netkit_check_mode() is a candidate which can
be simplified through this as well aside from the netkit scrubbing one.

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Nikolay Aleksandrov <razor@blackwall.org>
Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
Link: https://lore.kernel.org/r/20241004101335.117711-2-daniel@iogearbox.net
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
drivers/net/netkit.c

index fba2c734f0ec7ffc366811d8422deb5afac0ac04..cd8360b9bbde270e5aba8fa841129211b108862c 100644 (file)
@@ -311,20 +311,6 @@ static int netkit_check_policy(int policy, struct nlattr *tb,
        }
 }
 
-static int netkit_check_mode(int mode, struct nlattr *tb,
-                            struct netlink_ext_ack *extack)
-{
-       switch (mode) {
-       case NETKIT_L2:
-       case NETKIT_L3:
-               return 0;
-       default:
-               NL_SET_ERR_MSG_ATTR(extack, tb,
-                                   "Provided device mode can only be L2 or L3");
-               return -EINVAL;
-       }
-}
-
 static int netkit_validate(struct nlattr *tb[], struct nlattr *data[],
                           struct netlink_ext_ack *extack)
 {
@@ -360,13 +346,8 @@ static int netkit_new_link(struct net *src_net, struct net_device *dev,
        int err;
 
        if (data) {
-               if (data[IFLA_NETKIT_MODE]) {
-                       attr = data[IFLA_NETKIT_MODE];
-                       mode = nla_get_u32(attr);
-                       err = netkit_check_mode(mode, attr, extack);
-                       if (err < 0)
-                               return err;
-               }
+               if (data[IFLA_NETKIT_MODE])
+                       mode = nla_get_u32(data[IFLA_NETKIT_MODE]);
                if (data[IFLA_NETKIT_PEER_INFO]) {
                        attr = data[IFLA_NETKIT_PEER_INFO];
                        ifmp = nla_data(attr);
@@ -976,7 +957,7 @@ static int netkit_fill_info(struct sk_buff *skb, const struct net_device *dev)
 
 static const struct nla_policy netkit_policy[IFLA_NETKIT_MAX + 1] = {
        [IFLA_NETKIT_PEER_INFO]         = { .len = sizeof(struct ifinfomsg) },
-       [IFLA_NETKIT_MODE]              = { .type = NLA_U32 },
+       [IFLA_NETKIT_MODE]              = NLA_POLICY_MAX(NLA_U32, NETKIT_L3),
        [IFLA_NETKIT_POLICY]            = { .type = NLA_U32 },
        [IFLA_NETKIT_PEER_POLICY]       = { .type = NLA_U32 },
        [IFLA_NETKIT_SCRUB]             = NLA_POLICY_MAX(NLA_U32, NETKIT_SCRUB_DEFAULT),