]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netfilter: x_tables: allow initial table replace without emitting audit log message
authorFlorian Westphal <fw@strlen.de>
Wed, 6 May 2026 10:07:13 +0000 (12:07 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Thu, 7 May 2026 23:30:16 +0000 (01:30 +0200)
At the moment we emit the audit log a bit too early, which makes it
necessary to also emit an unregister log in case we have to unwind
errors after possible hook register failure.

Followup patch will be slightly simpler if we can delay the
register message until after the hooks have been wired up.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/x_tables.c

index 2c67c2e6b1328854558630f2074638917a25914c..bb0cb39595515161afc89f7addcc798d1bb8212a 100644 (file)
@@ -1472,11 +1472,9 @@ struct xt_counters *xt_counters_alloc(unsigned int counters)
 }
 EXPORT_SYMBOL(xt_counters_alloc);
 
-struct xt_table_info *
-xt_replace_table(struct xt_table *table,
-             unsigned int num_counters,
-             struct xt_table_info *newinfo,
-             int *error)
+static struct xt_table_info *
+do_replace_table(struct xt_table *table, unsigned int num_counters,
+                struct xt_table_info *newinfo, int *error)
 {
        struct xt_table_info *private;
        unsigned int cpu;
@@ -1531,10 +1529,23 @@ xt_replace_table(struct xt_table *table,
                }
        }
 
-       audit_log_nfcfg(table->name, table->af, private->number,
-                       !private->number ? AUDIT_XT_OP_REGISTER :
-                                          AUDIT_XT_OP_REPLACE,
-                       GFP_KERNEL);
+       return private;
+}
+
+struct xt_table_info *
+xt_replace_table(struct xt_table *table, unsigned int num_counters,
+                struct xt_table_info *newinfo,
+                int *error)
+{
+       struct xt_table_info *private;
+
+       private = do_replace_table(table, num_counters, newinfo, error);
+       if (private)
+               audit_log_nfcfg(table->name, table->af, private->number,
+                               !private->number ? AUDIT_XT_OP_REGISTER :
+                               AUDIT_XT_OP_REPLACE,
+                               GFP_KERNEL);
+
        return private;
 }
 EXPORT_SYMBOL_GPL(xt_replace_table);