Skip to content

Commit 104031a

Browse files
Phil Sutterummakynes
authored andcommitted
netfilter: nf_tables: Prepare for handling NETDEV_REGISTER events
Put NETDEV_UNREGISTER handling code into a switch, no functional change intended as the function is only called for that event yet. Signed-off-by: Phil Sutter <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 73319a8 commit 104031a

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

net/netfilter/nf_tables_api.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9696,14 +9696,19 @@ static void nft_flowtable_event(unsigned long event, struct net_device *dev,
96969696
struct nft_hook *hook;
96979697

96989698
list_for_each_entry(hook, &flowtable->hook_list, list) {
9699-
ops = nft_hook_find_ops(hook, dev);
9700-
if (!ops)
9701-
continue;
9699+
switch (event) {
9700+
case NETDEV_UNREGISTER:
9701+
ops = nft_hook_find_ops(hook, dev);
9702+
if (!ops)
9703+
continue;
97029704

9703-
/* flow_offload_netdev_event() cleans up entries for us. */
9704-
nft_unregister_flowtable_ops(dev_net(dev), flowtable, ops);
9705-
list_del_rcu(&ops->list);
9706-
kfree_rcu(ops, rcu);
9705+
/* flow_offload_netdev_event() cleans up entries for us. */
9706+
nft_unregister_flowtable_ops(dev_net(dev),
9707+
flowtable, ops);
9708+
list_del_rcu(&ops->list);
9709+
kfree_rcu(ops, rcu);
9710+
break;
9711+
}
97079712
break;
97089713
}
97099714
}

net/netfilter/nft_chain_filter.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -321,19 +321,24 @@ static const struct nft_chain_type nft_chain_filter_netdev = {
321321
static void nft_netdev_event(unsigned long event, struct net_device *dev,
322322
struct nft_base_chain *basechain)
323323
{
324+
struct nft_table *table = basechain->chain.table;
324325
struct nf_hook_ops *ops;
325326
struct nft_hook *hook;
326327

327328
list_for_each_entry(hook, &basechain->hook_list, list) {
328-
ops = nft_hook_find_ops(hook, dev);
329-
if (!ops)
330-
continue;
329+
switch (event) {
330+
case NETDEV_UNREGISTER:
331+
ops = nft_hook_find_ops(hook, dev);
332+
if (!ops)
333+
continue;
331334

332-
if (!(basechain->chain.table->flags & NFT_TABLE_F_DORMANT))
333-
nf_unregister_net_hook(dev_net(dev), ops);
335+
if (!(table->flags & NFT_TABLE_F_DORMANT))
336+
nf_unregister_net_hook(dev_net(dev), ops);
334337

335-
list_del_rcu(&ops->list);
336-
kfree_rcu(ops, rcu);
338+
list_del_rcu(&ops->list);
339+
kfree_rcu(ops, rcu);
340+
break;
341+
}
337342
break;
338343
}
339344
}

0 commit comments

Comments
 (0)