Skip to content

Commit 8e57ce3

Browse files
author
Paolo Abeni
committed
Merge tag 'nf-25-04-17' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf
Pablo Neira Ayuso says: ==================== Netfilter fix for net The following batch contains one Netfilter fix for net: 1) conntrack offload bit is erroneously unset in a race scenario, from Florian Westphal. netfilter pull request 25-04-17 * tag 'nf-25-04-17' of git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf: netfilter: conntrack: fix erronous removal of offload bit ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents a43ae7c + d2d31ea commit 8e57ce3

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

net/netfilter/nf_flow_table_core.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -383,8 +383,8 @@ static void flow_offload_del(struct nf_flowtable *flow_table,
383383
void flow_offload_teardown(struct flow_offload *flow)
384384
{
385385
clear_bit(IPS_OFFLOAD_BIT, &flow->ct->status);
386-
set_bit(NF_FLOW_TEARDOWN, &flow->flags);
387-
flow_offload_fixup_ct(flow);
386+
if (!test_and_set_bit(NF_FLOW_TEARDOWN, &flow->flags))
387+
flow_offload_fixup_ct(flow);
388388
}
389389
EXPORT_SYMBOL_GPL(flow_offload_teardown);
390390

@@ -558,10 +558,12 @@ static void nf_flow_offload_gc_step(struct nf_flowtable *flow_table,
558558

559559
if (nf_flow_has_expired(flow) ||
560560
nf_ct_is_dying(flow->ct) ||
561-
nf_flow_custom_gc(flow_table, flow))
561+
nf_flow_custom_gc(flow_table, flow)) {
562562
flow_offload_teardown(flow);
563-
else if (!teardown)
563+
teardown = true;
564+
} else if (!teardown) {
564565
nf_flow_table_extend_ct_timeout(flow->ct);
566+
}
565567

566568
if (teardown) {
567569
if (test_bit(NF_FLOW_HW, &flow->flags)) {

0 commit comments

Comments
 (0)