Eric Dumazet
997ba88896
icmp: change the order of rate limits
...
commit 8c2bd38b95f75f3d2a08c93e35303e26d480d24e upstream.
ICMP messages are ratelimited :
After the blamed commits, the two rate limiters are applied in this order:
1) host wide ratelimit (icmp_global_allow())
2) Per destination ratelimit (inetpeer based)
In order to avoid side-channels attacks, we need to apply
the per destination check first.
This patch makes the following change :
1) icmp_global_allow() checks if the host wide limit is reached.
But credits are not yet consumed. This is deferred to 3)
2) The per destination limit is checked/updated.
This might add a new node in inetpeer tree.
3) icmp_global_consume() consumes tokens if prior operations succeeded.
This means that host wide ratelimit is still effective
in keeping inetpeer tree small even under DDOS.
As a bonus, I removed icmp_global.lock as the fast path
can use a lock-free operation.
Fixes: c0303efeab ("net: reduce cycles spend on ICMP replies that gets rate limited")
Fixes: 4cdf507d54 ("icmp: add a global rate limitation")
Reported-by: Keyu Man <keyu.man@email.ucr.edu >
Signed-off-by: Eric Dumazet <edumazet@google.com >
Reviewed-by: David Ahern <dsahern@kernel.org >
Cc: Jesper Dangaard Brouer <hawk@kernel.org >
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20240829144641.3880376-2-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org >
Signed-off-by: Eric Dumazet <edumazet@google.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2024-10-17 15:21:27 +02:00
..
2022-10-05 07:05:41 +09:00
2024-10-17 15:20:42 +02:00
2021-11-19 11:52:25 +00:00
2024-09-30 16:23:54 +02:00
2023-10-25 12:03:06 +02:00
2021-11-17 20:17:05 -08:00
2022-07-22 12:53:22 +01:00
2023-03-11 13:55:26 +01:00
2023-03-11 13:55:28 +01:00
2022-09-09 08:24:41 +01:00
2024-04-17 11:18:24 +02:00
2022-09-01 11:44:13 +01:00
2024-05-02 16:29:27 +02:00
2022-08-23 10:43:11 +02:00
2022-07-22 12:53:22 +01:00
2023-10-10 22:00:42 +02:00
2024-06-12 11:03:20 +02:00
2022-08-09 22:14:02 -07:00
2021-12-13 12:34:09 +00:00
2022-09-16 14:34:01 +01:00
2023-05-11 23:03:41 +09:00
2022-07-22 12:53:22 +01:00
2023-08-30 16:11:04 +02:00
2024-09-04 13:25:02 +02:00
2024-08-29 17:30:21 +02:00
2024-04-03 15:19:31 +02:00
2022-03-11 10:57:22 +00:00
2021-12-22 15:03:47 -08:00
2022-07-22 12:53:22 +01:00
2021-12-22 15:03:51 -08:00
2022-07-24 18:39:17 -06:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-09-30 18:17:16 -07:00
2022-09-07 15:28:08 +01:00
2024-04-27 17:07:17 +02:00
2021-11-29 19:50:45 -08:00
2022-10-03 07:52:13 +01:00
2024-06-16 13:41:40 +02:00
2022-12-31 13:33:02 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2021-12-06 16:06:02 -08:00
2021-12-16 07:18:35 -08:00
2022-07-28 22:21:54 -07:00
2022-09-20 09:13:38 +02:00
2022-09-20 09:13:38 +02:00
2023-11-20 11:52:15 +01:00
2022-07-11 19:49:38 -07:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2021-10-18 12:54:41 +01:00
2023-12-13 18:39:12 +01:00
2022-08-25 16:07:42 -07:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-02-04 16:25:21 +01:00
2022-10-07 08:42:00 +01:00
2023-12-20 17:00:15 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2024-06-12 11:03:12 +02:00
2024-06-12 11:03:53 +02:00
2024-07-05 09:31:46 +02:00
2022-02-07 20:12:45 -08:00
2021-10-15 11:33:08 +01:00
2022-07-22 12:53:22 +01:00
2024-06-12 11:03:12 +02:00
2024-01-31 16:17:04 -08:00
2024-08-29 17:30:44 +02:00
2022-02-17 07:00:39 -06:00
2021-11-16 13:16:54 +00:00
2023-09-19 12:28:10 +02:00
2024-08-14 13:53:02 +02:00
2022-04-25 11:40:45 +01:00
2024-08-03 08:49:24 +02:00
2024-06-21 14:35:51 +02:00
2023-05-24 17:32:39 +01:00
2024-10-17 15:21:27 +02:00
2022-09-29 07:18:00 +02:00
2022-07-22 12:53:22 +01:00
2022-02-04 14:15:11 -08:00
2024-03-06 14:45:20 +00:00
2023-09-19 12:28:10 +02:00
2024-08-29 17:30:44 +02:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2021-12-07 20:44:59 -08:00
2021-10-13 09:40:46 -07:00
2024-01-31 16:17:04 -08:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2022-07-28 11:29:36 +02:00
2021-11-07 19:25:29 +00:00
2023-09-13 09:42:33 +02:00
2024-10-17 15:20:38 +02:00
2022-04-25 20:51:12 +02:00
2024-05-02 16:29:32 +02:00
2024-03-06 14:45:06 +00:00
2021-10-29 13:23:51 +01:00
2022-07-22 12:53:22 +01:00
2023-01-07 11:11:44 +01:00
2022-12-31 13:33:02 +01:00
2022-07-22 12:53:22 +01:00
2023-10-10 22:00:42 +02:00
2023-10-10 22:00:42 +02:00
2022-05-11 12:43:10 +01:00
2022-07-11 16:25:14 +02:00
2021-12-10 06:38:26 -08:00
2022-07-22 12:53:22 +01:00
2023-10-10 22:00:44 +02:00
2022-07-22 12:53:22 +01:00
2023-10-10 22:00:46 +02:00
2022-09-02 19:59:08 -07:00
2022-07-22 12:53:22 +01:00
2023-06-05 09:26:20 +02:00
2023-06-14 11:15:16 +02:00
2022-10-02 16:07:17 +01:00
2023-07-23 13:49:27 +02:00
2022-07-22 12:53:22 +01:00
2022-07-15 18:50:35 -07:00
2021-08-09 15:34:21 -07:00
2022-07-22 12:53:22 +01:00
2023-04-13 16:55:23 +02:00
2022-06-19 10:00:02 +01:00
2022-10-11 17:42:58 -06:00
2023-07-19 16:21:10 +02:00
2022-02-02 14:45:18 +00:00
2022-08-01 11:59:23 -07:00
2023-08-11 12:08:14 +02:00
2023-06-14 11:15:20 +02:00
2023-08-30 16:11:02 +02:00
2024-06-27 13:46:15 +02:00
2023-05-11 23:03:18 +09:00
2022-07-22 12:53:22 +01:00
2022-01-04 12:17:35 +00:00
2022-07-27 13:24:42 +01:00
2022-12-31 13:32:04 +01:00
2024-06-16 13:41:40 +02:00
2021-08-03 13:05:26 +01:00
2022-07-22 12:53:22 +01:00
2022-07-18 11:24:10 +01:00
2024-03-01 13:26:35 +01:00
2024-10-17 15:21:13 +02:00
2024-02-23 09:12:31 +01:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2024-01-10 17:10:28 +01:00
2024-01-10 17:10:27 +01:00
2022-10-12 17:50:37 -07:00
2023-08-11 12:08:17 +02:00
2022-07-22 12:53:22 +01:00
2022-09-30 07:55:46 -07:00
2021-12-29 08:48:14 -08:00
2022-09-26 13:28:19 -07:00
2024-05-17 11:56:10 +02:00
2023-05-11 23:03:21 +09:00