FAILED: patch "[PATCH] netfilter: nf_tables: release batch on table validation from" failed to apply to 5.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.4.y
git checkout FETCH_HEAD
git cherry-pick -x a45e6889575c2067d3c0212b6bc1022891e65b91
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024040501-playpen-squeezing-60a4@gregkh' --subject-prefix 'PATCH 5.4.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From a45e6889575c2067d3c0212b6bc1022891e65b91 Mon Sep 17 00:00:00 2001
From: Pablo Neira Ayuso <[email protected]>
Date: Thu, 28 Mar 2024 13:27:36 +0100
Subject: [PATCH] netfilter: nf_tables: release batch on table validation from
abort path
Unlike early commit path stage which triggers a call to abort, an explicit release of the batch is required on abort, otherwise mutex is released and commit_list remains in place.
Add WARN_ON_ONCE to ensure commit_list is empty from the abort path before releasing the mutex.
After this patch, commit_list is always assumed to be empty before grabbing the mutex, therefore
03c1f1ef1584 ("netfilter: Cleanup nft_net->module_list from nf_tables_exit_net()")
only needs to release the pending modules for registration.
net/netfilter/nf_tables_api.c +10 -5
@@ -10455,10 +10455,11 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action)struct nft_trans *trans, *next;LIST_HEAD (set_update_list);struct nft_trans_elem *te; +int err =0 ;if (action ==NFNL_ABORT_VALIDATE &&nf_tables_validate (net) <0 ) -return -EAGAIN ; + err = -EAGAIN ;list_for_each_entry_safe_reverse (trans, next, &nft_net->commit_list, list) {
@@ -10655,7 +10656,7 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action)else nf_tables_module_autoload_cleanup (net); -return 0 ; +return err; } static int nf_tables_abort(struct net *net, struct sk_buff *skb,
@@ -10668,6 +10669,9 @@ static int nf_tables_abort(struct net *net, struct sk_buff *skb, gc_seq =nft_gc_seq_begin (nft_net); ret =__nf_tables_abort (net, action);nft_gc_seq_end (nft_net, gc_seq); + +WARN_ON_ONCE (!list_empty (&nft_net->commit_list)); +mutex_unlock (&nft_net->commit_mutex);return ret;
@@ -11473,9 +11477,10 @@ static void __net_exit nf_tables_exit_net(struct net *net) gc_seq =nft_gc_seq_begin (nft_net); -if (!list_empty (&nft_net->commit_list) || - !list_empty (&nft_net->module_list)) -__nf_tables_abort (net,NFNL_ABORT_NONE ); +WARN_ON_ONCE (!list_empty (&nft_net->commit_list)); + +if (!list_empty (&nft_net->module_list)) +nf_tables_module_autoload_cleanup (net);__nft_release_tables (net);