On Fri, Apr 04, 2025 at 05:28:15PM +0200, Sebastian Andrzej Siewior wrote: > From: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> > > The seqcount xt_recseq is used to synchronize the replacement of > xt_table::private in xt_replace_table() against all readers such as > ipt_do_table() > > To ensure that there is only one writer, the writing side disables > bottom halves. The sequence counter can be acquired recursively. Only the > first invocation modifies the sequence counter (signaling that a writer > is in progress) while the following (recursive) writer does not modify > the counter. > The lack of a proper locking mechanism for the sequence counter can lead > to live lock on PREEMPT_RT if the high prior reader preempts the > writer. Additionally if the per-CPU lock on PREEMPT_RT is removed from > local_bh_disable() then there is no synchronisation for the per-CPU > sequence counter. > > The affected code is "just" the legacy netfilter code which is replaced > by "netfilter tables". That code can be disabled without sacrificing > functionality because everything is provided by the newer > implementation. This will only requires the usage of the "-nft" tools > instead of the "-legacy" ones. > The long term plan is to remove the legacy code so lets accelerate the > progress. > > Relax dependencies on iptables legacy, replace select with depends on, > this should cause no harm to existing kernel configs and users can still > toggle IP{6}_NF_IPTABLES_LEGACY in any case. > Make EBTABLES_LEGACY, IPTABLES_LEGACY and ARPTABLES depend on > NETFILTER_LEGACY. Hide xt_recseq and its users, xt_register_table() and > xt_percpu_counter_alloc() behind NETFILTER_LEGACY. Let NETFILTER_LEGACY > depend on !PREEMPT_RT. > > Replace CONFIG_IP6_NF_MANGLE->CONFIG_IP6_NF_IPTABLES for TCPOPTSTRIP and > add CONFIG_NFT_COMPAT_ARP to the MARK target for the IPv6 and ARP target > to keep it enabled without the LEGACY code for NFT. Applied to nf-next. Thanks for keeping me as author, I don't deserve it.