mirror of https://github.com/torvalds/linux.git
mov %rsp, %r1 ; r1 = rsp
add $-8, %r1 ; r1 = rsp - 8
store_q $123, -8(%rsp) ; *(u64*)r1 = 123 <- valid
store_q $123, (%r1) ; *(u64*)r1 = 123 <- previously invalid
mov $0, %r0
exit ; Always need to exit
And we'd get the following error:
0: (bf) r1 = r10
1: (07) r1 += -8
2: (7a) *(u64 *)(r10 -8) = 999
3: (7a) *(u64 *)(r1 +0) = 999
R1 invalid mem access 'fp'
Unable to load program
We already know that a register is a stack address and the appropriate
offset, so we should be able to validate those references as well.
Signed-off-by: Alex Gartrell <agartrell@fb.com>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||
|---|---|---|
| .. | ||
| Makefile | ||
| bpf_helpers.h | ||
| bpf_load.c | ||
| bpf_load.h | ||
| lathist_kern.c | ||
| lathist_user.c | ||
| libbpf.c | ||
| libbpf.h | ||
| sock_example.c | ||
| sockex1_kern.c | ||
| sockex1_user.c | ||
| sockex2_kern.c | ||
| sockex2_user.c | ||
| sockex3_kern.c | ||
| sockex3_user.c | ||
| tcbpf1_kern.c | ||
| test_maps.c | ||
| test_verifier.c | ||
| tracex1_kern.c | ||
| tracex1_user.c | ||
| tracex2_kern.c | ||
| tracex2_user.c | ||
| tracex3_kern.c | ||
| tracex3_user.c | ||
| tracex4_kern.c | ||
| tracex4_user.c | ||
| tracex5_kern.c | ||
| tracex5_user.c | ||