From: Sven Eckelmann Date: Thu, 23 May 2019 19:26:45 +0200 Subject: Revert "batman-adv: genetlink: optionally validate strictly/dumps" OpenWrt's mac80211 package is not yet ready to support the generic netlink API of Linux 5.2. This reverts commit 2ee47abaeb35ca62bb909830e10b0e973393b853. --- a/compat-include/net/genetlink.h +++ b/compat-include/net/genetlink.h @@ -33,25 +33,6 @@ void batadv_genl_dump_check_consistent(s #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 2, 0) -enum genl_validate_flags { - GENL_DONT_VALIDATE_STRICT = BIT(0), - GENL_DONT_VALIDATE_DUMP = BIT(1), - GENL_DONT_VALIDATE_DUMP_STRICT = BIT(2), -}; - -struct batadv_genl_ops { - int (*doit)(struct sk_buff *skb, - struct genl_info *info); - int (*start)(struct netlink_callback *cb); - int (*dumpit)(struct sk_buff *skb, - struct netlink_callback *cb); - int (*done)(struct netlink_callback *cb); - u8 cmd; - u8 internal_flags; - u8 flags; - u8 validate; -}; - struct batadv_genl_family { /* data handled by the actual kernel */ struct genl_family family; @@ -69,7 +50,7 @@ struct batadv_genl_family { struct genl_info *info); void (*post_doit)(const struct genl_ops *ops, struct sk_buff *skb, struct genl_info *info); - const struct batadv_genl_ops *ops; + const struct genl_ops *ops; const struct genl_multicast_group *mcgrps; unsigned int n_ops; unsigned int n_mcgrps; @@ -82,6 +63,8 @@ struct batadv_genl_family { struct genl_ops *copy_ops; }; +#define genl_family batadv_genl_family + static inline int batadv_genl_register_family(struct batadv_genl_family *family) { struct genl_ops *ops; @@ -99,20 +82,12 @@ static inline int batadv_genl_register_f family->family.n_mcgrps = family->n_mcgrps; family->family.module = family->module; - ops = kzalloc(sizeof(*ops) * family->n_ops, GFP_KERNEL); + ops = kmemdup(family->ops, sizeof(*ops) * family->n_ops, GFP_KERNEL); if (!ops) return -ENOMEM; - for (i = 0; i < family->family.n_ops; i++) { - ops[i].doit = family->ops[i].doit; - ops[i].start = family->ops[i].start; - ops[i].dumpit = family->ops[i].dumpit; - ops[i].done = family->ops[i].done; - ops[i].cmd = family->ops[i].cmd; - ops[i].internal_flags = family->ops[i].internal_flags; - ops[i].flags = family->ops[i].flags; + for (i = 0; i < family->family.n_ops; i++) ops[i].policy = family->policy; - } family->family.ops = ops; family->copy_ops = ops; @@ -120,17 +95,6 @@ static inline int batadv_genl_register_f return genl_register_family(&family->family); } -typedef struct genl_ops batadv_genl_ops_old; - -#define batadv_pre_doit(__x, __y, __z) \ - batadv_pre_doit(const batadv_genl_ops_old *ops, __y, __z) - -#define batadv_post_doit(__x, __y, __z) \ - batadv_post_doit(const batadv_genl_ops_old *ops, __y, __z) - -#define genl_ops batadv_genl_ops -#define genl_family batadv_genl_family - #define genl_register_family(family) \ batadv_genl_register_family((family)) --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c @@ -1343,34 +1343,29 @@ static void batadv_post_doit(const struc static const struct genl_ops batadv_netlink_ops[] = { { .cmd = BATADV_CMD_GET_MESH, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, /* can be retrieved by unprivileged users */ .doit = batadv_netlink_get_mesh, .internal_flags = BATADV_FLAG_NEED_MESH, }, { .cmd = BATADV_CMD_TP_METER, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_tp_meter_start, .internal_flags = BATADV_FLAG_NEED_MESH, }, { .cmd = BATADV_CMD_TP_METER_CANCEL, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_tp_meter_cancel, .internal_flags = BATADV_FLAG_NEED_MESH, }, { .cmd = BATADV_CMD_GET_ROUTING_ALGOS, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_algo_dump, }, { .cmd = BATADV_CMD_GET_HARDIF, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, /* can be retrieved by unprivileged users */ .dumpit = batadv_netlink_dump_hardif, .doit = batadv_netlink_get_hardif, @@ -1379,68 +1374,57 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_GET_TRANSTABLE_LOCAL, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_tt_local_dump, }, { .cmd = BATADV_CMD_GET_TRANSTABLE_GLOBAL, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_tt_global_dump, }, { .cmd = BATADV_CMD_GET_ORIGINATORS, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_orig_dump, }, { .cmd = BATADV_CMD_GET_NEIGHBORS, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_hardif_neigh_dump, }, { .cmd = BATADV_CMD_GET_GATEWAYS, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_gw_dump, }, { .cmd = BATADV_CMD_GET_BLA_CLAIM, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_bla_claim_dump, }, { .cmd = BATADV_CMD_GET_BLA_BACKBONE, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_bla_backbone_dump, }, { .cmd = BATADV_CMD_GET_DAT_CACHE, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_dat_cache_dump, }, { .cmd = BATADV_CMD_GET_MCAST_FLAGS, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .dumpit = batadv_mcast_flags_dump, }, { .cmd = BATADV_CMD_SET_MESH, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_set_mesh, .internal_flags = BATADV_FLAG_NEED_MESH, }, { .cmd = BATADV_CMD_SET_HARDIF, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_set_hardif, .internal_flags = BATADV_FLAG_NEED_MESH | @@ -1448,7 +1432,6 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_GET_VLAN, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, /* can be retrieved by unprivileged users */ .doit = batadv_netlink_get_vlan, .internal_flags = BATADV_FLAG_NEED_MESH | @@ -1456,7 +1439,6 @@ static const struct genl_ops batadv_netl }, { .cmd = BATADV_CMD_SET_VLAN, - .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .flags = GENL_ADMIN_PERM, .doit = batadv_netlink_set_vlan, .internal_flags = BATADV_FLAG_NEED_MESH |