Florian Westphal
d2d31ea8cd
netfilter: conntrack: fix erronous removal of offload bit
...
The blamed commit exposes a possible issue with flow_offload_teardown():
We might remove the offload bit of a conntrack entry that has been
offloaded again.
1. conntrack entry c1 is offloaded via flow f1 (f1->ct == c1).
2. f1 times out and is pushed back to slowpath, c1 offload bit is
removed. Due to bug, f1 is not unlinked from rhashtable right away.
3. a new packet arrives for the flow and re-offload is triggered, i.e.
f2->ct == c1. This is because lookup in flowtable skip entries with
teardown bit set.
4. Next flowtable gc cycle finds f1 again
5. flow_offload_teardown() is called again for f1 and c1 offload bit is
removed again, even though we have f2 referencing the same entry.
This is harmless, but clearly not correct.
Fix the bug that exposes this: set 'teardown = true' to have the gc
callback unlink the flowtable entry from the table right away instead of
the unintentional defer to the next round.
Also prevent flow_offload_teardown() from fixing up the ct state more than
once: We could also be called from the data path or a notifier, not only
from the flowtable gc callback.
NF_FLOW_TEARDOWN can never be unset, so we can use it as synchronization
point: if we observe did not see a 0 -> 1 transition, then another CPU
is already doing the ct state fixups for us.
Fixes: 03428ca5cee9 ("netfilter: conntrack: rework offload nf_conn timeout extension logic")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2025-04-17 11:14:22 +02:00
..
2025-04-05 10:30:12 +02:00
2025-04-08 12:09:28 -07:00
2024-09-06 18:10:21 -07:00
2025-04-04 11:31:42 -07:00
2024-07-01 17:03:01 +02:00
2024-11-14 12:39:50 +01:00
2025-03-12 15:28:33 +01:00
2022-02-04 06:30:28 +01:00
2025-01-19 16:41:55 +01:00
2024-05-22 15:00:56 -07:00
2025-01-19 16:41:55 +01:00
2025-01-19 16:41:55 +01:00
2025-01-09 14:42:16 +01:00
2025-04-05 10:30:12 +02:00
2023-09-13 21:57:50 +02:00
2022-09-20 23:50:03 +02:00
2024-03-07 03:10:35 +01:00
2025-01-19 16:41:55 +01:00
2023-10-10 16:34:28 +02:00
2022-09-07 15:55:23 +02:00
2023-10-24 13:16:30 +02:00
2022-01-11 10:41:44 +01:00
2025-04-05 10:30:12 +02:00
2023-03-08 14:25:41 +01:00
2022-07-11 16:25:15 +02:00
2024-05-06 11:13:56 +02:00
2023-07-05 14:42:15 +02:00
2021-06-18 14:47:43 +02:00
2024-05-06 11:13:56 +02:00
2025-01-12 20:21:01 -08:00
2024-10-02 17:23:23 -04:00
2023-02-01 12:18:51 +01:00
2023-11-08 13:52:32 +01:00
2022-08-11 16:50:25 +02:00
2022-02-04 06:30:28 +01:00
2025-01-19 16:41:55 +01:00
2025-03-12 21:01:56 +01:00
2022-07-11 16:25:15 +02:00
2022-02-04 06:30:28 +01:00
2022-06-21 10:50:41 +02:00
2024-07-01 17:03:01 +02:00
2025-04-17 11:14:22 +02:00
2024-09-12 15:41:03 +02:00
2025-02-12 10:35:20 +01:00
2025-03-06 12:59:43 -08:00
2022-07-11 16:25:14 +02:00
2024-07-01 17:01:53 +02:00
2024-07-24 20:59:29 +02:00
2024-06-19 18:41:59 +02:00
2025-03-17 13:49:46 +00:00
2024-07-24 20:59:29 +02:00
2022-09-07 16:46:04 +02:00
2024-01-31 20:40:56 -08:00
2024-11-11 10:32:06 -08:00
2022-09-07 16:46:04 +02:00
2022-11-18 02:15:15 +01:00
2022-09-07 16:46:04 +02:00
2022-05-13 18:56:27 +02:00
2024-01-03 11:17:17 +01:00
2023-10-30 14:36:57 -07:00
2023-11-08 16:40:30 +01:00
2022-09-07 16:46:04 +02:00
2024-02-21 12:03:22 +01:00
2024-10-02 17:23:23 -04:00
2025-04-02 22:51:08 +02:00
2025-03-23 10:53:47 +01:00
2025-03-06 12:59:43 -08:00
2024-06-12 14:33:38 -07:00
2021-05-29 01:04:53 +02:00
2022-07-11 16:25:15 +02:00
2024-06-26 00:54:53 +02:00
2023-04-21 11:34:14 -07:00
2025-04-05 10:30:12 +02:00
2023-11-08 13:52:32 +01:00
2025-03-23 10:20:33 +01:00
2024-11-14 12:39:40 +01:00
2024-11-15 12:07:04 +01:00
2024-10-02 17:23:23 -04:00
2025-01-19 16:41:54 +01:00
2023-11-08 13:52:32 +01:00
2021-05-29 01:04:54 +02:00
2024-08-20 12:37:24 +02:00
2025-03-06 13:35:54 +01:00
2024-05-10 11:13:45 +02:00
2024-09-03 10:47:16 +02:00
2023-05-03 13:49:08 +02:00
2025-03-03 13:46:49 +01:00
2024-08-20 12:37:24 +02:00
2024-09-03 18:19:44 +02:00
2025-03-13 10:02:39 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:47 +01:00
2024-09-03 10:47:17 +02:00
2025-01-19 16:41:54 +01:00
2024-09-03 10:47:17 +02:00
2024-08-20 12:37:24 +02:00
2024-09-03 10:47:17 +02:00
2024-12-03 22:10:58 +01:00
2024-05-10 11:13:45 +02:00
2024-05-10 11:13:45 +02:00
2024-09-26 13:03:02 +02:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2024-09-26 13:03:02 +02:00
2024-09-03 10:47:17 +02:00
2024-09-26 13:03:02 +02:00
2024-08-20 12:37:24 +02:00
2024-09-03 10:47:17 +02:00
2024-10-31 10:54:49 +01:00
2024-09-03 10:47:17 +02:00
2024-05-10 11:13:45 +02:00
2024-08-20 12:37:24 +02:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2024-11-05 22:06:22 +01:00
2025-04-02 22:50:56 +02:00
2025-04-10 12:33:50 +02:00
2021-05-29 01:04:27 +02:00
2024-09-26 13:03:02 +02:00
2024-07-17 19:00:47 +02:00
2025-01-19 16:41:41 +01:00
2024-11-28 13:14:24 +01:00
2024-09-03 10:47:17 +02:00
2024-09-03 10:47:17 +02:00
2025-04-03 16:23:01 -07:00
2024-12-05 10:01:28 +01:00
2024-02-21 12:03:22 +01:00
2024-10-30 13:17:36 +01:00
2024-10-09 23:20:46 +02:00
2021-06-01 23:53:51 +02:00
2021-08-17 00:45:07 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2024-10-09 23:20:46 +02:00
2022-07-11 16:40:45 +02:00
2025-03-12 16:37:48 +01:00
2024-12-11 23:15:19 +01:00
2024-11-28 13:14:24 +01:00
2023-02-22 21:25:23 -08:00
2021-05-29 01:04:52 +02:00
2021-09-21 03:46:56 +02:00
2024-10-21 11:31:26 +02:00
2024-10-21 11:31:26 +02:00
2023-06-20 22:43:42 +02:00
2023-12-06 17:52:15 +01:00
2024-01-17 12:02:48 +01:00
2024-10-09 23:20:46 +02:00
2024-06-28 17:57:50 +02:00
2023-03-22 21:48:59 +01:00
2025-03-23 10:53:47 +01:00
2023-08-30 17:34:01 +02:00
2024-10-09 23:20:46 +02:00
2023-07-29 18:13:41 +01:00
2022-10-11 17:42:58 -06:00
2022-07-11 16:40:45 +02:00
2023-03-22 21:48:59 +01:00
2022-07-21 00:56:00 +02:00
2024-10-21 11:31:26 +02:00
2023-08-30 17:34:01 +02:00