mirror of
https://github.com/openwrt/openwrt.git
synced 2026-05-05 22:25:44 +04:00
39ae0f972d
This is an automatically generated commit. When doing `git bisect`, consider `git bisect --skip`. Signed-off-by: Kenneth Kasilag <kenneth@kasilag.me> Link: https://github.com/openwrt/openwrt/pull/19038 Signed-off-by: Robert Marko <robimarko@gmail.com>
43 lines
1.7 KiB
Diff
43 lines
1.7 KiB
Diff
From 9f6b606b6b37e61427412708411e8e04b1a858e8 Mon Sep 17 00:00:00 2001
|
|
From: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Date: Mon, 18 Aug 2025 11:58:25 +0200
|
|
Subject: [PATCH] net: airoha: ppe: Do not invalid PPE entries in case of SW
|
|
hash collision
|
|
|
|
SW hash computed by airoha_ppe_foe_get_entry_hash routine (used for
|
|
foe_flow hlist) can theoretically produce collisions between two
|
|
different HW PPE entries.
|
|
In airoha_ppe_foe_insert_entry() if the collision occurs we will mark
|
|
the second PPE entry in the list as stale (setting the hw hash to 0xffff).
|
|
Stale entries are no more updated in airoha_ppe_foe_flow_entry_update
|
|
routine and so they are removed by Netfilter.
|
|
Fix the problem not marking the second entry as stale in
|
|
airoha_ppe_foe_insert_entry routine if we have already inserted the
|
|
brand new entry in the PPE table and let Netfilter remove real stale
|
|
entries according to their timestamp.
|
|
Please note this is just a theoretical issue spotted reviewing the code
|
|
and not faced running the system.
|
|
|
|
Fixes: cd53f622611f9 ("net: airoha: Add L2 hw acceleration support")
|
|
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
|
|
Link: https://patch.msgid.link/20250818-airoha-en7581-hash-collision-fix-v1-1-d190c4b53d1c@kernel.org
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
drivers/net/ethernet/airoha/airoha_ppe.c | 4 +---
|
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/airoha/airoha_ppe.c
|
|
+++ b/drivers/net/ethernet/airoha/airoha_ppe.c
|
|
@@ -736,10 +736,8 @@ static void airoha_ppe_foe_insert_entry(
|
|
continue;
|
|
}
|
|
|
|
- if (commit_done || !airoha_ppe_foe_compare_entry(e, hwe)) {
|
|
- e->hash = 0xffff;
|
|
+ if (!airoha_ppe_foe_compare_entry(e, hwe))
|
|
continue;
|
|
- }
|
|
|
|
airoha_ppe_foe_commit_entry(ppe, &e->data, hash);
|
|
commit_done = true;
|