Skip to content

Commit f013c1d

Browse files
anakryikogregkh
authored andcommitted
selftests/bpf: validate precision logic in partial_stack_load_preserves_zeros
[ Upstream commit 064e0be ] Enhance partial_stack_load_preserves_zeros subtest with detailed precision propagation log checks. We know expect fp-16 to be spilled, initially imprecise, zero const register, which is later marked as precise even when partial stack slot load is performed, even if it's not a register fill (!). Acked-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20231205184248.1502704-10-andrii@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com> Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com> Acked-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent c05c8db commit f013c1d

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

tools/testing/selftests/bpf/progs/verifier_spill_fill.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -495,6 +495,22 @@ char single_byte_buf[1] SEC(".data.single_byte_buf");
495495
SEC("raw_tp")
496496
__log_level(2)
497497
__success
498+
/* make sure fp-8 is all STACK_ZERO */
499+
__msg("2: (7a) *(u64 *)(r10 -8) = 0 ; R10=fp0 fp-8_w=00000000")
500+
/* but fp-16 is spilled IMPRECISE zero const reg */
501+
__msg("4: (7b) *(u64 *)(r10 -16) = r0 ; R0_w=0 R10=fp0 fp-16_w=0")
502+
/* and now check that precision propagation works even for such tricky case */
503+
__msg("10: (71) r2 = *(u8 *)(r10 -9) ; R2_w=P0 R10=fp0 fp-16_w=0")
504+
__msg("11: (0f) r1 += r2")
505+
__msg("mark_precise: frame0: last_idx 11 first_idx 0 subseq_idx -1")
506+
__msg("mark_precise: frame0: regs=r2 stack= before 10: (71) r2 = *(u8 *)(r10 -9)")
507+
__msg("mark_precise: frame0: regs= stack=-16 before 9: (bf) r1 = r6")
508+
__msg("mark_precise: frame0: regs= stack=-16 before 8: (73) *(u8 *)(r1 +0) = r2")
509+
__msg("mark_precise: frame0: regs= stack=-16 before 7: (0f) r1 += r2")
510+
__msg("mark_precise: frame0: regs= stack=-16 before 6: (71) r2 = *(u8 *)(r10 -1)")
511+
__msg("mark_precise: frame0: regs= stack=-16 before 5: (bf) r1 = r6")
512+
__msg("mark_precise: frame0: regs= stack=-16 before 4: (7b) *(u64 *)(r10 -16) = r0")
513+
__msg("mark_precise: frame0: regs=r0 stack= before 3: (b7) r0 = 0")
498514
__naked void partial_stack_load_preserves_zeros(void)
499515
{
500516
asm volatile (

0 commit comments

Comments
 (0)