diff options
| author | Sang-Hoon Choi <csh0052@gmail.com> | 2026-10-02 19:47:40 +0000 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-10-05 17:02:54 -0700 |
| commit | a032c035272aff415a3ac7ec48bd16aada5fc4bf (patch) | |
| tree | 37ff98cac2d5b4bd5d93ab5398232c3f4aed0b49 | |
| parent | a089139eb47bf80d13cc394f59a96b868d88c09e (diff) | |
| download | linux-next-a032c035272aff415a3ac7ec48bd16aada5fc4bf.tar.gz linux-next-a032c035272aff415a3ac7ec48bd16aada5fc4bf.zip | |
nfp: flower: remove merge entry when conntrack offload fails
nfp_ct_do_nft_merge() inserts nft_m_entry into nft_merge_tb and
increments nft_merge_count before calling nfp_fl_ct_add_offload(). If
that call fails, the error path removes the entry from its lists and
frees it, but leaves the hash entry and count behind.
Remove the hash entry and undo the count increment before freeing
nft_m_entry.
Cc: stable+noautosel@kernel.org # untested fix to unlikely driver error path
Fixes: a87ceb3d42af ("nfp: flower: offload tc flows of multiple conntrack zones")
Reported-by: Changyul Lee <lcy8047@gmail.com>
Signed-off-by: Sang-Hoon Choi <csh0052@gmail.com>
Link: https://patch.msgid.link/20261003.final049.214b9988b1e1f0a7@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| -rw-r--r-- | drivers/net/ethernet/netronome/nfp/flower/conntrack.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c index c983e8b1799d..522ad555e8ec 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c @@ -1260,6 +1260,10 @@ static int nfp_ct_do_nft_merge(struct nfp_fl_ct_zone_entry *zt, err_nft_ct_offload: nfp_fl_ct_del_offload(zt->priv->app, nft_m_entry->tc_flower_cookie, nft_m_entry->netdev); + WARN_ON_ONCE(rhashtable_remove_fast(&zt->nft_merge_tb, + &nft_m_entry->hash_node, + nfp_nft_ct_merge_params)); + zt->nft_merge_count--; err_nft_ct_merge_insert: list_del(&nft_m_entry->tc_merge_list); list_del(&nft_m_entry->nft_flow_list); |
