Martin KaFai Lau
061ff04071
bpf: tcp: Stop bpf_setsockopt(TCP_CONGESTION) in init ops to recur itself
...
When a bad bpf prog '.init' calls
bpf_setsockopt(TCP_CONGESTION, "itself"), it will trigger this loop:
.init => bpf_setsockopt(tcp_cc) => .init => bpf_setsockopt(tcp_cc) ...
... => .init => bpf_setsockopt(tcp_cc).
It was prevented by the prog->active counter before but the prog->active
detection cannot be used in struct_ops as explained in the earlier
patch of the set.
In this patch, the second bpf_setsockopt(tcp_cc) is not allowed
in order to break the loop. This is done by using a bit of
an existing 1 byte hole in tcp_sock to check if there is
on-going bpf_setsockopt(TCP_CONGESTION) in this tcp_sock.
Note that this essentially limits only the first '.init' can
call bpf_setsockopt(TCP_CONGESTION) to pick a fallback cc (eg. peer
does not support ECN) and the second '.init' cannot fallback to
another cc. This applies even the second
bpf_setsockopt(TCP_CONGESTION) will not cause a loop.
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org >
Reviewed-by: Eric Dumazet <edumazet@google.com >
Link: https://lore.kernel.org/r/20220929070407.965581-5-martin.lau@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org >
2022-09-29 09:25:47 -07:00
..
2022-06-03 11:48:47 -07:00
2022-05-18 00:08:27 +02:00
2022-07-28 11:44:30 +02:00
2022-08-03 14:05:39 +02:00
2022-06-10 14:51:36 +02:00
2022-06-10 15:57:54 +02:00
2022-08-04 19:30:35 -07:00
2022-07-28 11:29:36 +02:00
2022-08-10 11:01:44 -07:00
2022-06-24 12:11:18 +08:00
2022-06-03 11:48:47 -07:00
2022-08-04 18:34:05 -07:00
2022-03-30 10:36:41 -07:00
2022-07-18 18:29:13 +01:00
2022-06-10 14:51:35 +02:00
2022-07-25 09:42:24 +01:00
2022-08-04 10:28:48 -04:00
2022-08-02 15:06:57 -05:00
2022-07-28 11:29:36 +02:00
2022-08-06 10:25:16 -07:00
2022-08-22 12:57:08 -07:00
2022-07-26 16:58:31 +02:00
2022-08-01 21:31:22 +02:00
2022-07-11 16:25:16 +02:00
2022-08-23 18:23:15 +02:00
2022-06-17 10:55:35 +01:00
2022-07-06 10:57:30 +01:00
2022-04-20 12:59:50 +05:30
2022-06-15 15:54:20 +02:00
2022-08-07 09:53:58 -07:00
2022-05-22 20:44:29 +01:00
2022-07-28 00:01:30 +01:00
2022-05-13 14:49:38 +02:00
2022-06-10 14:51:35 +02:00
2022-03-23 19:58:38 +01:00
2022-08-05 16:32:45 -07:00
2022-08-04 12:12:54 -07:00
2022-08-06 10:19:51 -07:00
2022-06-30 13:40:35 +01:00
2022-08-10 14:04:32 -07:00
2022-07-02 11:23:14 +02:00
2022-08-04 12:12:54 -07:00
2022-04-06 13:43:44 -07:00
2022-07-06 12:51:11 +02:00
2022-07-05 20:25:39 +02:00
2022-08-11 13:26:09 -07:00
2022-07-15 10:41:04 +02:00
2022-06-27 11:07:55 +02:00
2022-07-04 16:22:29 +01:00
2022-04-29 14:51:46 +01:00
2022-07-28 11:29:36 +02:00
2022-08-04 08:33:54 -06:00
2022-07-29 18:12:35 -07:00
2022-07-29 18:07:15 -07:00
2022-08-02 12:34:03 -04:00
2022-08-02 17:14:47 -06:00
2022-07-14 12:14:30 -06:00
2022-03-23 19:00:33 -07:00
2022-08-07 17:52:35 -07:00
2022-08-26 09:30:25 -07:00
2022-07-14 12:14:30 -06:00
2022-05-02 14:06:20 -06:00
2022-08-18 07:38:10 -06:00
2022-08-04 20:00:14 -07:00
2022-07-14 12:14:30 -06:00
2022-04-26 17:58:51 -04:00
2022-04-19 17:55:45 -07:00
2022-06-29 13:21:52 -07:00
2022-09-05 15:33:07 +02:00
2022-09-21 16:24:17 -07:00
2022-09-21 17:32:48 -07:00
2022-06-29 13:21:52 -07:00
2022-08-23 16:08:21 -07:00
2022-09-29 09:25:47 -07:00
2022-08-04 16:57:43 -07:00
2022-08-17 11:49:23 +01:00
2022-07-22 09:07:07 -07:00
2022-09-21 17:32:48 -07:00
2022-08-26 09:30:25 -07:00
2022-03-23 10:11:03 -07:00
2022-07-04 16:22:28 +01:00
2022-05-23 17:51:12 -07:00
2022-05-15 18:31:28 -06:00
2022-08-03 09:45:08 -07:00
2022-08-15 12:35:31 -10:00
2022-08-02 12:19:18 -07:00
2022-06-15 19:22:29 -07:00
2022-05-13 07:20:13 -07:00
2022-04-28 23:16:17 -07:00
2022-05-31 14:10:54 -07:00
2022-08-24 09:47:51 +01:00
2022-07-03 11:32:22 -07:00
2022-04-13 12:16:00 -07:00
2022-07-17 17:31:38 -07:00
2022-08-29 13:29:40 -07:00
2022-06-27 14:17:12 +02:00
2022-06-23 18:41:40 +02:00
2022-06-10 13:37:02 +02:00
2022-07-05 13:32:59 -07:00
2022-07-05 13:33:00 -07:00
2022-07-05 13:33:00 -07:00
2022-07-06 16:32:08 +01:00
2022-04-08 11:31:18 +02:00
2022-06-27 10:33:59 +02:00
2022-04-27 20:22:19 +02:00
2022-08-01 12:48:15 -07:00
2022-08-15 11:00:44 -07:00
2022-04-29 14:37:59 -07:00
2022-06-07 10:27:38 +02:00
2022-07-03 18:08:43 -07:00
2022-07-17 17:14:32 -07:00
2022-08-11 12:41:07 -07:00
2022-06-01 15:55:25 -07:00
2022-06-27 16:39:29 +02:00
2022-06-30 05:11:17 +09:00
2022-07-28 17:36:30 -04:00
2022-06-10 16:01:55 +02:00
2022-06-28 10:37:25 -03:00
2022-07-28 17:46:14 -04:00
2022-07-14 12:14:31 -06:00
2022-07-08 10:47:07 -07:00
2022-04-07 12:53:53 +02:00
2022-03-25 14:18:28 +01:00
2022-03-25 14:18:28 +01:00
2022-07-14 14:41:30 +02:00
2022-08-08 15:16:29 -07:00
2022-07-26 07:27:48 -04:00
2022-04-07 12:53:54 +02:00
2022-06-27 12:01:40 +05:30
2022-07-15 10:21:43 +02:00
2022-08-03 14:41:36 -07:00
2022-04-14 14:08:26 +02:00
2022-07-15 19:17:30 +02:00
2022-07-05 13:32:59 -07:00
2022-08-29 12:57:38 +01:00
2022-04-15 11:41:35 -07:00
2022-06-26 18:18:56 +02:00
2022-05-24 16:33:20 +09:00
2022-06-03 11:48:47 -07:00
2022-07-15 11:37:41 +09:00
2022-07-01 14:53:01 +02:00
2022-05-19 14:08:55 -07:00
2022-06-15 19:12:17 +02:00
2022-07-07 10:50:46 +02:00
2022-05-14 18:49:01 -04:00
2022-05-14 18:47:28 -04:00
2022-09-26 20:40:43 -07:00
2022-06-03 06:52:57 -07:00
2022-04-05 18:23:05 +02:00
2022-04-26 12:34:28 +02:00
2022-05-12 10:49:23 +02:00
2022-08-13 13:28:54 -07:00
2022-08-31 14:57:28 +01:00
2022-08-03 00:54:11 +02:00
2022-07-01 14:51:13 +02:00
2022-05-01 16:39:36 -04:00
2022-07-22 22:04:30 +02:00
2022-06-27 16:52:25 +02:00
2022-08-29 12:47:15 +01:00
2022-08-07 17:52:35 -07:00
2022-07-15 06:35:54 -07:00
2022-04-11 11:48:01 +02:00
2022-07-19 09:56:34 +02:00
2022-07-05 13:33:00 -07:00
2022-07-25 17:45:40 +02:00
2022-08-08 18:06:46 -07:00
2022-07-28 11:29:36 +02:00
2022-06-17 17:19:20 +08:00
2022-06-27 12:52:53 -07:00
2022-06-01 11:50:42 +02:00
2022-07-08 16:27:52 +02:00
2022-05-04 11:05:54 +02:00
2022-08-05 16:32:45 -07:00
2022-08-08 18:06:44 -07:00
2022-05-22 11:32:31 -07:00
2022-06-03 11:48:47 -07:00
2022-07-22 16:06:03 -05:00
2022-07-26 23:13:36 +02:00
2022-04-13 13:09:57 +01:00
2022-08-25 10:41:24 +02:00
2022-04-25 20:51:12 +02:00
2022-07-28 11:29:36 +02:00
2022-07-28 11:29:36 +02:00
2022-06-09 21:53:09 -07:00
2022-07-28 11:29:36 +02:00
2022-07-28 11:29:36 +02:00
2022-06-09 21:53:12 -07:00
2022-06-09 21:53:09 -07:00
2022-09-02 20:34:31 -07:00
2022-07-01 15:22:16 +02:00
2022-07-15 18:55:49 -07:00
2022-03-23 19:00:34 -07:00
2022-04-06 13:43:44 -07:00
2022-04-22 12:32:04 +02:00
2022-05-13 15:14:56 +02:00
2022-07-04 16:14:29 +03:00
2022-05-24 11:11:13 -07:00
2022-08-12 17:01:00 -06:00
2022-05-11 07:40:47 -06:00
2022-07-07 09:42:59 +02:00
2022-08-11 13:11:49 -07:00
2022-07-15 10:13:45 +02:00
2022-07-21 17:19:25 -07:00
2022-06-27 06:29:12 -06:00
2022-06-29 17:42:28 -07:00
2022-07-19 06:05:45 +02:00
2022-05-12 10:00:03 -05:00
2022-05-12 10:00:03 -05:00
2022-05-31 11:36:57 +02:00
2022-07-20 15:26:05 +01:00
2022-07-11 10:12:49 +01:00
2022-04-05 10:24:34 +02:00
2022-07-22 17:24:47 -05:00
2022-08-04 20:13:46 -07:00
2022-06-24 09:48:55 +02:00
2022-05-10 14:42:06 -07:00
2022-04-29 14:36:58 -07:00
2022-04-05 08:43:04 -07:00
2022-06-16 19:58:21 -07:00
2022-07-04 09:23:07 +02:00
2022-04-27 10:57:33 -07:00
2022-07-06 14:20:22 +02:00
2022-07-15 12:21:16 -04:00
2022-09-21 17:32:48 -07:00
2022-04-15 14:49:55 -07:00
2022-07-17 17:31:38 -07:00
2022-07-17 17:14:33 -07:00
2022-06-16 19:48:30 -07:00
2022-04-05 15:39:19 +02:00
2022-09-26 20:30:39 -07:00
2022-05-19 14:08:54 -07:00
2022-05-02 14:06:20 -06:00
2022-08-19 04:05:41 -04:00
2022-08-01 03:21:00 -04:00
2022-07-22 12:53:22 +01:00
2022-04-21 11:40:59 -07:00
2022-08-21 01:29:50 +09:00
2022-07-26 12:23:01 -07:00
2022-06-16 19:58:21 -07:00
2022-05-06 15:59:39 +02:00
2022-03-22 15:57:03 -07:00
2022-05-27 11:22:03 -07:00
2022-05-24 08:46:37 +02:00
2022-04-05 09:59:39 +02:00
2022-06-24 09:48:56 +02:00
2022-07-03 14:40:28 -07:00
2022-03-23 19:00:33 -07:00
2022-05-03 16:09:03 -04:00
2022-08-26 11:19:43 -04:00
2022-08-26 11:19:43 -04:00
2022-05-23 14:45:24 -05:00
2022-08-02 23:56:25 -04:00
2022-03-29 22:45:31 +02:00
2022-07-07 14:06:12 -06:00
2022-05-01 17:45:35 +01:00
2022-04-21 11:33:56 -07:00
2022-08-28 14:02:44 -07:00
2022-07-03 18:08:49 -07:00
2022-03-22 15:57:10 -07:00
2022-06-23 18:42:05 -07:00
2022-07-17 17:14:30 -07:00
2022-04-26 13:17:42 +02:00
2022-08-05 16:32:45 -07:00
2022-06-19 10:38:26 +01:00
2022-07-27 14:04:52 +02:00
2022-05-13 07:20:10 -07:00
2022-07-17 17:14:34 -07:00
2022-08-28 14:02:44 -07:00
2022-04-28 23:16:14 -07:00
2022-08-03 00:54:12 +02:00
2022-06-27 12:52:53 -07:00
2022-07-29 18:07:19 -07:00
2022-07-15 22:08:01 +02:00
2022-04-26 13:17:42 +02:00
2022-07-11 17:13:15 -06:00
2022-05-19 23:25:48 -04:00
2022-08-02 12:34:04 -04:00
2022-09-02 20:34:31 -07:00
2022-06-24 11:34:38 +01:00
2022-09-02 20:34:31 -07:00
2022-04-28 16:31:10 +02:00
2022-03-23 12:17:36 -07:00
2022-08-07 10:03:24 -07:00
2022-05-05 18:25:57 -07:00
2022-09-02 12:41:43 +01:00
2022-08-22 14:26:30 +01:00
2022-03-24 15:09:53 +01:00
2022-08-22 14:26:30 +01:00
2022-08-03 10:35:43 -07:00
2022-08-30 12:20:43 +02:00
2022-05-17 13:32:46 -04:00
2022-05-31 17:09:30 -04:00
2022-08-13 13:02:14 -04:00
2022-08-09 14:11:34 -04:00
2022-07-29 20:16:58 -04:00
2022-07-23 15:28:59 -04:00
2022-07-28 11:29:36 +02:00
2022-07-27 21:35:32 +10:00
2022-03-22 15:57:10 -07:00
2022-08-01 08:13:21 -07:00
2022-05-19 19:30:30 +02:00
2022-08-02 17:14:49 -06:00
2022-05-19 20:24:56 -04:00
2022-08-02 17:14:47 -06:00
2022-05-09 15:44:21 +02:00
2022-08-02 19:24:24 -07:00
2022-07-19 10:24:01 +02:00
2022-05-22 15:59:54 +10:00
2022-07-08 14:53:50 +02:00
2022-08-04 18:08:34 -07:00
2022-04-29 09:53:52 +02:00
2022-07-21 10:39:42 +02:00
2022-07-17 17:31:37 -07:00
2022-04-06 13:43:44 -07:00
2022-08-29 13:29:40 -07:00
2022-08-08 18:06:43 -07:00
2022-05-13 07:20:13 -07:00
2022-03-22 15:57:06 -07:00
2022-08-05 16:32:45 -07:00
2022-08-05 16:32:45 -07:00
2022-07-01 16:38:35 -06:00
2022-08-10 11:07:26 -07:00
2022-07-19 15:38:04 -07:00
2022-07-14 15:25:36 -05:00
2022-07-26 07:28:08 -04:00
2022-07-29 12:08:44 -05:00
2022-09-05 10:16:53 +01:00
2022-06-27 11:37:55 +01:00
2022-06-28 09:08:31 +02:00
2022-07-17 17:14:37 -07:00
2022-07-28 11:29:36 +02:00
2022-09-05 14:30:42 +01:00
2022-04-13 12:38:44 +01:00
2022-08-08 22:37:19 -04:00
2022-06-03 11:48:47 -07:00
2022-05-19 20:16:05 +02:00
2022-07-12 20:35:21 +05:30
2022-07-01 21:04:02 +02:00
2022-06-10 14:51:36 +02:00
2022-07-05 20:48:46 +02:00
2022-05-30 11:37:26 -07:00
2022-09-15 02:44:07 -07:00
2022-05-22 11:32:30 -07:00
2022-07-15 22:08:59 +02:00
2022-07-15 22:09:57 +02:00
2022-03-28 17:29:53 -07:00
2022-07-28 11:29:36 +02:00
2022-07-26 09:49:12 -07:00
2022-07-28 11:29:36 +02:00
2022-05-18 15:53:52 +02:00
2022-06-23 19:11:28 +02:00
2022-06-03 11:17:49 -07:00
2022-08-15 12:35:25 -10:00
2022-06-24 20:40:04 +02:00
2022-05-19 16:58:16 -07:00
2022-05-10 09:48:08 +02:00
2022-07-28 11:29:36 +02:00
2022-07-28 11:29:36 +02:00
2022-05-11 14:33:44 -05:00
2022-06-22 15:35:13 +02:00
2022-06-26 18:18:56 +02:00
2022-08-14 13:31:03 -07:00
2022-07-25 13:26:14 +02:00
2022-05-10 10:40:26 -07:00
2022-06-19 23:50:46 +02:00
2022-06-16 19:58:20 -07:00
2022-06-20 09:22:28 -07:00
2022-07-21 17:46:18 -07:00
2022-07-21 17:46:18 -07:00
2022-07-21 17:46:18 -07:00
2022-05-30 11:37:26 -07:00
2022-07-03 11:32:22 -07:00
2022-06-29 18:13:17 +01:00
2022-08-11 04:06:37 -04:00
2022-06-29 15:56:20 +02:00
2022-08-31 15:45:10 -07:00
2022-05-06 09:51:33 +02:00
2022-03-23 19:58:41 +01:00
2022-04-19 12:20:45 +02:00
2022-05-09 15:37:36 +02:00
2022-07-01 08:53:26 +02:00
2022-07-30 14:01:28 -04:00
2022-03-21 20:01:34 -06:00
2022-07-26 07:27:47 -04:00
2022-08-06 17:34:06 -07:00
2022-08-02 11:17:00 -07:00
2022-05-03 14:11:58 -07:00
2022-08-26 11:19:43 -04:00
2022-07-28 11:29:36 +02:00
2022-05-22 21:03:01 +01:00
2022-04-07 12:53:54 +02:00
2022-06-27 14:44:20 +02:00
2022-08-08 11:31:40 -07:00
2022-06-30 17:09:08 +02:00
2022-06-27 14:41:31 +02:00
2022-05-16 11:46:44 -07:00
2022-08-20 15:17:45 -07:00
2022-07-03 18:08:40 -07:00
2022-05-11 14:33:17 -05:00
2022-06-03 10:34:34 -07:00
2022-09-06 23:21:18 +02:00
2022-08-10 21:47:58 -07:00
2022-05-26 12:32:41 -07:00
2022-05-02 10:48:40 +02:00
2022-08-03 16:29:08 -07:00
2022-09-02 20:34:30 -07:00
2022-06-18 13:48:19 +01:00
2022-06-10 14:51:35 +02:00
2022-05-03 10:20:57 -07:00
2022-04-06 10:55:50 +02:00
2022-05-08 01:33:08 -07:00
2022-04-05 09:59:38 +02:00
2022-03-23 19:00:33 -07:00
2022-08-17 20:40:52 -07:00
2022-05-12 15:35:29 +02:00
2022-05-12 10:49:23 +02:00
2022-07-28 11:29:36 +02:00
2022-04-13 16:34:01 +02:00
2022-05-19 14:08:50 -07:00
2022-08-05 16:32:45 -07:00
2022-08-08 18:06:44 -07:00
2022-07-18 06:50:18 +02:00
2022-08-08 18:06:43 -07:00
2022-06-29 09:51:41 +02:00
2022-07-19 15:38:04 -07:00
2022-04-11 19:18:27 -06:00
2022-04-30 08:39:32 -06:00
2022-07-15 10:21:30 +02:00
2022-09-29 09:25:47 -07:00
2022-04-26 10:16:48 +02:00
2022-07-28 17:29:56 +02:00
2022-03-22 15:57:11 -07:00
2022-08-31 14:05:12 +01:00
2022-06-10 14:51:35 +02:00
2022-08-09 20:02:13 +02:00
2022-04-14 16:19:30 +02:00
2022-04-10 12:38:45 +02:00
2022-05-13 23:59:23 +02:00
2022-09-02 14:44:54 +02:00
2022-05-19 23:46:13 +02:00
2022-04-11 17:07:29 -07:00
2022-08-03 23:56:20 +03:00
2022-08-29 13:29:40 -07:00
2022-08-05 09:41:12 -07:00
2022-06-10 13:51:31 +02:00
2022-06-27 14:34:09 +02:00
2022-06-10 13:51:31 +02:00
2022-07-01 10:35:08 +02:00
2022-06-07 16:18:08 -04:00
2022-07-19 09:56:51 +02:00
2022-08-08 22:37:24 -04:00
2022-06-12 06:49:47 +02:00
2022-04-02 10:32:14 -07:00
2022-08-20 15:17:45 -07:00
2022-08-11 04:31:14 -04:00
2022-09-21 17:32:49 -07:00
2022-05-08 01:33:07 -07:00
2022-08-06 08:59:35 -07:00
2022-07-25 13:41:22 -06:00
2022-05-31 12:44:28 -04:00
2022-08-01 07:42:49 +02:00
2022-08-16 01:40:24 -04:00
2022-08-11 04:06:40 -04:00
2022-08-11 04:06:38 -04:00
2022-08-16 01:40:24 -04:00
2022-08-20 15:17:45 -07:00
2022-06-13 09:54:52 -07:00
2022-08-26 09:30:25 -07:00
2022-07-28 12:35:12 +02:00
2022-07-07 13:09:59 -06:00
2022-06-10 14:51:35 +02:00
2022-05-07 22:55:48 +02:00
2022-07-12 11:07:32 +10:00
2022-08-02 13:46:35 -07:00
2022-07-10 21:17:30 -04:00
2022-07-15 22:08:59 +02:00