Eduard Zingerman
d0b98f6a17
bpf: disallow 40-bytes extra stack for bpf_fastcall patterns
Hou Tao reported an issue with bpf_fastcall patterns allowing extra
stack space above MAX_BPF_STACK limit. This extra stack allowance is
not integrated properly with the following verifier parts:
- backtracking logic still assumes that stack can't exceed
MAX_BPF_STACK;
- bpf_verifier_env->scratched_stack_slots assumes only 64 slots are
available.
Here is an example of an issue with precision tracking
(note stack slot -8 tracked as precise instead of -520):
0: (b7) r1 = 42 ; R1_w=42
1: (b7) r2 = 42 ; R2_w=42
2: (7b) *(u64 *)(r10 -512) = r1 ; R1_w=42 R10=fp0 fp-512_w=42
3: (7b) *(u64 *)(r10 -520) = r2 ; R2_w=42 R10=fp0 fp-520_w=42
4: (85) call bpf_get_smp_processor_id#8 ; R0_w=scalar(...)
5: (79) r2 = *(u64 *)(r10 -520) ; R2_w=42 R10=fp0 fp-520_w=42
6: (79) r1 = *(u64 *)(r10 -512) ; R1_w=42 R10=fp0 fp-512_w=42
7: (bf) r3 = r10 ; R3_w=fp0 R10=fp0
8: (0f) r3 += r2
mark_precise: frame0: last_idx 8 first_idx 0 subseq_idx -1
mark_precise: frame0: regs=r2 stack= before 7: (bf) r3 = r10
mark_precise: frame0: regs=r2 stack= before 6: (79) r1 = *(u64 *)(r10 -512)
mark_precise: frame0: regs=r2 stack= before 5: (79) r2 = *(u64 *)(r10 -520)
mark_precise: frame0: regs= stack=-8 before 4: (85) call bpf_get_smp_processor_id#8
mark_precise: frame0: regs= stack=-8 before 3: (7b) *(u64 *)(r10 -520) = r2
mark_precise: frame0: regs=r2 stack= before 2: (7b) *(u64 *)(r10 -512) = r1
mark_precise: frame0: regs=r2 stack= before 1: (b7) r2 = 42
9: R2_w=42 R3_w=fp42
9: (95) exit
This patch disables the additional allowance for the moment.
Also, two test cases are removed:
- bpf_fastcall_max_stack_ok:
it fails w/o additional stack allowance;
- bpf_fastcall_max_stack_fail:
this test is no longer necessary, stack size follows
regular rules, pattern invalidation is checked by other
test cases.
Reported-by: Hou Tao <houtao@huaweicloud.com>
Closes: https://lore.kernel.org/bpf/20241023022752.172005-1-houtao@huaweicloud.com/
Fixes: 5b5f51bff1 ("bpf: no_caller_saved_registers attribute for helper calls")
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Tested-by: Hou Tao <houtao1@huawei.com>
Link: https://lore.kernel.org/r/20241029193911.1575719-1-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2024-10-29 19:43:16 -07:00
..
2024-10-29 19:43:16 -07:00
2024-09-23 09:35:36 -07:00
2024-09-01 20:34:38 +09:00
2024-10-02 17:23:23 -04:00
2024-09-23 08:38:56 +02:00
2024-07-29 07:33:10 +05:30
2024-10-14 09:14:35 +02:00
2024-09-01 20:43:33 -07:00
2024-06-15 10:43:06 -07:00
2024-09-23 12:47:06 -07:00
2024-08-01 16:40:44 -07:00
2024-07-02 16:56:18 +02:00
2024-09-29 08:51:30 -07:00
2024-09-28 09:06:15 -07:00
2024-09-27 08:18:43 -07:00
2024-09-19 10:18:15 +02:00
2024-10-17 09:58:07 +02:00
2024-10-17 09:58:07 +02:00
2024-10-24 16:43:50 -07:00
2024-10-24 16:53:20 -07:00
2024-04-24 09:43:53 +02:00
2024-02-09 11:13:59 -10:00
2024-04-04 16:24:16 +02:00
2024-04-04 16:24:16 +02:00
2024-09-03 16:35:16 -04:00
2024-08-28 16:48:28 -04:00
2024-08-28 16:48:28 -04:00
2024-06-24 22:24:55 -07:00
2024-04-29 08:29:29 -07:00
2024-08-15 21:30:43 +05:30
2024-09-17 07:25:37 +02:00
2024-09-01 20:43:37 -07:00
2024-09-01 20:43:30 -07:00
2024-02-23 17:33:31 -05:00
2024-07-24 20:59:29 +02:00
2024-02-23 17:48:22 -08:00
2024-09-21 07:29:05 -07:00
2024-09-29 21:52:29 -04:00
2024-10-14 09:14:35 +02:00
2024-05-30 01:13:20 +09:00
2024-07-24 20:59:29 +02:00
2024-09-10 11:57:27 +02:00
2024-07-20 16:33:21 +09:00
2024-08-15 09:33:35 -07:00
2024-08-15 09:33:35 -07:00
2023-10-19 11:02:48 +02:00
2024-02-23 17:48:22 -08:00
2024-08-01 07:08:01 -10:00
2024-09-17 12:40:34 +02:00
2024-07-24 20:59:29 +02:00
2024-09-01 17:59:01 -07:00
2024-09-01 20:43:23 -07:00
2024-04-23 14:59:01 +10:00
2024-08-05 14:04:03 +09:00
2024-07-29 10:45:54 -07:00
2024-10-09 12:47:19 -07:00
2024-07-24 20:59:29 +02:00
2024-09-03 21:15:26 -07:00
2024-08-12 22:00:43 -04:00
2024-09-16 06:28:28 +02:00
2024-09-19 10:18:15 +02:00
2023-12-01 09:51:44 -08:00
2024-07-24 20:59:29 +02:00
2024-07-24 20:59:29 +02:00
2024-08-12 22:00:43 -04:00
2024-08-04 13:36:28 -07:00
2024-02-22 15:38:52 -08:00
2024-04-24 09:43:53 +02:00
2024-04-25 21:07:03 -07:00
2024-09-27 08:18:43 -07:00
2024-10-09 12:47:19 -07:00
2024-09-21 07:29:05 -07:00
2024-05-30 15:31:51 -07:00
2024-07-24 20:59:29 +02:00
2024-09-26 11:39:02 -07:00
2024-08-15 00:06:48 +05:30
2023-10-04 10:41:57 -07:00
2024-08-20 17:13:40 +02:00
2024-07-24 20:59:29 +02:00
2023-12-29 12:22:29 -08:00
2024-09-06 16:29:22 +02:00
2024-08-15 21:30:42 +05:30
2024-07-18 12:19:20 -07:00
2024-09-23 09:35:36 -07:00
2024-06-03 15:20:37 +02:00
2024-07-24 20:59:29 +02:00
2024-10-11 10:49:32 +02:00
2024-08-12 22:00:43 -04:00
2024-05-30 15:31:38 -07:00
2024-09-25 23:23:44 +09:00
2024-07-12 16:39:53 -07:00
2024-05-17 17:31:24 -07:00
2024-07-24 20:59:29 +02:00
2024-09-09 16:47:42 -07:00
2024-09-12 12:16:09 +02:00
2024-07-24 20:59:29 +02:00
2024-05-22 08:31:15 -04:00
2024-09-03 21:15:43 -07:00
2024-08-12 22:00:43 -04:00
2024-07-17 21:11:34 -07:00
2024-09-01 20:43:32 -07:00
2024-09-18 06:59:44 +02:00