diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/testing/selftests/bpf/test_verifier.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index cabb19b1e371..0ff8c55c0464 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c | |||
| @@ -3749,6 +3749,72 @@ static struct bpf_test tests[] = { | |||
| 3749 | .errstr = "invalid bpf_context access", | 3749 | .errstr = "invalid bpf_context access", |
| 3750 | }, | 3750 | }, |
| 3751 | { | 3751 | { |
| 3752 | "leak pointer into ctx 1", | ||
| 3753 | .insns = { | ||
| 3754 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 3755 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, | ||
| 3756 | offsetof(struct __sk_buff, cb[0])), | ||
| 3757 | BPF_LD_MAP_FD(BPF_REG_2, 0), | ||
| 3758 | BPF_STX_XADD(BPF_DW, BPF_REG_1, BPF_REG_2, | ||
| 3759 | offsetof(struct __sk_buff, cb[0])), | ||
| 3760 | BPF_EXIT_INSN(), | ||
| 3761 | }, | ||
| 3762 | .fixup_map1 = { 2 }, | ||
| 3763 | .errstr_unpriv = "R2 leaks addr into mem", | ||
| 3764 | .result_unpriv = REJECT, | ||
| 3765 | .result = ACCEPT, | ||
| 3766 | }, | ||
| 3767 | { | ||
| 3768 | "leak pointer into ctx 2", | ||
| 3769 | .insns = { | ||
| 3770 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 3771 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, | ||
| 3772 | offsetof(struct __sk_buff, cb[0])), | ||
| 3773 | BPF_STX_XADD(BPF_DW, BPF_REG_1, BPF_REG_10, | ||
| 3774 | offsetof(struct __sk_buff, cb[0])), | ||
| 3775 | BPF_EXIT_INSN(), | ||
| 3776 | }, | ||
| 3777 | .errstr_unpriv = "R10 leaks addr into mem", | ||
| 3778 | .result_unpriv = REJECT, | ||
| 3779 | .result = ACCEPT, | ||
| 3780 | }, | ||
| 3781 | { | ||
| 3782 | "leak pointer into ctx 3", | ||
| 3783 | .insns = { | ||
| 3784 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 3785 | BPF_LD_MAP_FD(BPF_REG_2, 0), | ||
| 3786 | BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_2, | ||
| 3787 | offsetof(struct __sk_buff, cb[0])), | ||
| 3788 | BPF_EXIT_INSN(), | ||
| 3789 | }, | ||
| 3790 | .fixup_map1 = { 1 }, | ||
| 3791 | .errstr_unpriv = "R2 leaks addr into ctx", | ||
| 3792 | .result_unpriv = REJECT, | ||
| 3793 | .result = ACCEPT, | ||
| 3794 | }, | ||
| 3795 | { | ||
| 3796 | "leak pointer into map val", | ||
| 3797 | .insns = { | ||
| 3798 | BPF_MOV64_REG(BPF_REG_6, BPF_REG_1), | ||
| 3799 | BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0), | ||
| 3800 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | ||
| 3801 | BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), | ||
| 3802 | BPF_LD_MAP_FD(BPF_REG_1, 0), | ||
| 3803 | BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, | ||
| 3804 | BPF_FUNC_map_lookup_elem), | ||
| 3805 | BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 3), | ||
| 3806 | BPF_MOV64_IMM(BPF_REG_3, 0), | ||
| 3807 | BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_3, 0), | ||
| 3808 | BPF_STX_XADD(BPF_DW, BPF_REG_0, BPF_REG_6, 0), | ||
| 3809 | BPF_MOV64_IMM(BPF_REG_0, 0), | ||
| 3810 | BPF_EXIT_INSN(), | ||
| 3811 | }, | ||
| 3812 | .fixup_map1 = { 4 }, | ||
| 3813 | .errstr_unpriv = "R6 leaks addr into mem", | ||
| 3814 | .result_unpriv = REJECT, | ||
| 3815 | .result = ACCEPT, | ||
| 3816 | }, | ||
| 3817 | { | ||
| 3752 | "helper access to map: full range", | 3818 | "helper access to map: full range", |
| 3753 | .insns = { | 3819 | .insns = { |
| 3754 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), | 3820 | BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), |
