Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netfilter: nf_tables: Introduce functions freeing nft_hook objects

Pointless wrappers around kfree() for now, prep work for an embedded
list of nf_hook_ops.

Signed-off-by: Phil Sutter <phil@nwl.cc>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

authored by

Phil Sutter and committed by
Pablo Neira Ayuso
75e20bcd 7e5c6aa6

+24 -14
+24 -14
net/netfilter/nf_tables_api.c
··· 323 323 return err; 324 324 } 325 325 326 + static void nft_netdev_hook_free(struct nft_hook *hook) 327 + { 328 + kfree(hook); 329 + } 330 + 331 + static void nft_netdev_hook_free_rcu(struct nft_hook *hook) 332 + { 333 + kfree_rcu(hook, rcu); 334 + } 335 + 326 336 static void nft_netdev_unregister_hooks(struct net *net, 327 337 struct list_head *hook_list, 328 338 bool release_netdev) ··· 343 333 nf_unregister_net_hook(net, &hook->ops); 344 334 if (release_netdev) { 345 335 list_del(&hook->list); 346 - kfree_rcu(hook, rcu); 336 + nft_netdev_hook_free_rcu(hook); 347 337 } 348 338 } 349 339 } ··· 2263 2253 list_for_each_entry_safe(hook, next, 2264 2254 &basechain->hook_list, list) { 2265 2255 list_del_rcu(&hook->list); 2266 - kfree_rcu(hook, rcu); 2256 + nft_netdev_hook_free_rcu(hook); 2267 2257 } 2268 2258 } 2269 2259 module_put(basechain->type->owner); ··· 2355 2345 } 2356 2346 if (nft_hook_list_find(hook_list, hook)) { 2357 2347 NL_SET_BAD_ATTR(extack, tmp); 2358 - kfree(hook); 2348 + nft_netdev_hook_free(hook); 2359 2349 err = -EEXIST; 2360 2350 goto err_hook; 2361 2351 } ··· 2373 2363 err_hook: 2374 2364 list_for_each_entry_safe(hook, next, hook_list, list) { 2375 2365 list_del(&hook->list); 2376 - kfree(hook); 2366 + nft_netdev_hook_free(hook); 2377 2367 } 2378 2368 return err; 2379 2369 } ··· 2516 2506 2517 2507 list_for_each_entry_safe(h, next, &hook->list, list) { 2518 2508 list_del(&h->list); 2519 - kfree(h); 2509 + nft_netdev_hook_free(h); 2520 2510 } 2521 2511 module_put(hook->type->owner); 2522 2512 } ··· 2805 2795 2806 2796 if (nft_hook_list_find(&basechain->hook_list, h)) { 2807 2797 list_del(&h->list); 2808 - kfree(h); 2798 + nft_netdev_hook_free(h); 2809 2799 } 2810 2800 } 2811 2801 } else { ··· 2926 2916 if (unregister) 2927 2917 nf_unregister_net_hook(ctx->net, &h->ops); 2928 2918 list_del(&h->list); 2929 - kfree_rcu(h, rcu); 2919 + nft_netdev_hook_free_rcu(h); 2930 2920 } 2931 2921 module_put(hook.type->owner); 2932 2922 } ··· 8917 8907 FLOW_BLOCK_UNBIND); 8918 8908 if (release_netdev) { 8919 8909 list_del(&hook->list); 8920 - kfree_rcu(hook, rcu); 8910 + nft_netdev_hook_free_rcu(hook); 8921 8911 } 8922 8912 } 8923 8913 } ··· 8975 8965 8976 8966 nft_unregister_flowtable_hook(net, flowtable, hook); 8977 8967 list_del_rcu(&hook->list); 8978 - kfree_rcu(hook, rcu); 8968 + nft_netdev_hook_free_rcu(hook); 8979 8969 } 8980 8970 8981 8971 return err; ··· 8987 8977 8988 8978 list_for_each_entry_safe(hook, next, hook_list, list) { 8989 8979 list_del_rcu(&hook->list); 8990 - kfree_rcu(hook, rcu); 8980 + nft_netdev_hook_free_rcu(hook); 8991 8981 } 8992 8982 } 8993 8983 ··· 9011 9001 list_for_each_entry_safe(hook, next, &flowtable_hook.list, list) { 9012 9002 if (nft_hook_list_find(&flowtable->hook_list, hook)) { 9013 9003 list_del(&hook->list); 9014 - kfree(hook); 9004 + nft_netdev_hook_free(hook); 9015 9005 } 9016 9006 } 9017 9007 ··· 9058 9048 if (unregister) 9059 9049 nft_unregister_flowtable_hook(ctx->net, flowtable, hook); 9060 9050 list_del_rcu(&hook->list); 9061 - kfree_rcu(hook, rcu); 9051 + nft_netdev_hook_free_rcu(hook); 9062 9052 } 9063 9053 9064 9054 return err; ··· 9204 9194 9205 9195 list_for_each_entry_safe(this, next, &flowtable_hook->list, list) { 9206 9196 list_del(&this->list); 9207 - kfree(this); 9197 + nft_netdev_hook_free(this); 9208 9198 } 9209 9199 } 9210 9200 ··· 9567 9557 flowtable->data.type->free(&flowtable->data); 9568 9558 list_for_each_entry_safe(hook, next, &flowtable->hook_list, list) { 9569 9559 list_del_rcu(&hook->list); 9570 - kfree_rcu(hook, rcu); 9560 + nft_netdev_hook_free_rcu(hook); 9571 9561 } 9572 9562 kfree(flowtable->name); 9573 9563 module_put(flowtable->data.type->owner);