Commit 6c2afb67 authored by Andrey Ignatov's avatar Andrey Ignatov Committed by Alexei Starovoitov

selftests/bpf: Test narrow loads with off > 0 in test_verifier

Test the following narrow loads in test_verifier for context __sk_buff:
* off=1, size=1 - ok;
* off=2, size=1 - ok;
* off=3, size=1 - ok;
* off=0, size=2 - ok;
* off=1, size=2 - fail;
* off=0, size=2 - ok;
* off=3, size=2 - fail.
Signed-off-by: default avatarAndrey Ignatov <rdna@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 46f53a65
...@@ -2026,29 +2026,27 @@ static struct bpf_test tests[] = { ...@@ -2026,29 +2026,27 @@ static struct bpf_test tests[] = {
.result = ACCEPT, .result = ACCEPT,
}, },
{ {
"check skb->hash byte load not permitted 1", "check skb->hash byte load permitted 1",
.insns = { .insns = {
BPF_MOV64_IMM(BPF_REG_0, 0), BPF_MOV64_IMM(BPF_REG_0, 0),
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 1), offsetof(struct __sk_buff, hash) + 1),
BPF_EXIT_INSN(), BPF_EXIT_INSN(),
}, },
.errstr = "invalid bpf_context access", .result = ACCEPT,
.result = REJECT,
}, },
{ {
"check skb->hash byte load not permitted 2", "check skb->hash byte load permitted 2",
.insns = { .insns = {
BPF_MOV64_IMM(BPF_REG_0, 0), BPF_MOV64_IMM(BPF_REG_0, 0),
BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1, BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 2), offsetof(struct __sk_buff, hash) + 2),
BPF_EXIT_INSN(), BPF_EXIT_INSN(),
}, },
.errstr = "invalid bpf_context access", .result = ACCEPT,
.result = REJECT,
}, },
{ {
"check skb->hash byte load not permitted 3", "check skb->hash byte load permitted 3",
.insns = { .insns = {
BPF_MOV64_IMM(BPF_REG_0, 0), BPF_MOV64_IMM(BPF_REG_0, 0),
#if __BYTE_ORDER == __LITTLE_ENDIAN #if __BYTE_ORDER == __LITTLE_ENDIAN
...@@ -2060,8 +2058,7 @@ static struct bpf_test tests[] = { ...@@ -2060,8 +2058,7 @@ static struct bpf_test tests[] = {
#endif #endif
BPF_EXIT_INSN(), BPF_EXIT_INSN(),
}, },
.errstr = "invalid bpf_context access", .result = ACCEPT,
.result = REJECT,
}, },
{ {
"check cb access: byte, wrong type", "check cb access: byte, wrong type",
...@@ -2173,7 +2170,7 @@ static struct bpf_test tests[] = { ...@@ -2173,7 +2170,7 @@ static struct bpf_test tests[] = {
.result = ACCEPT, .result = ACCEPT,
}, },
{ {
"check skb->hash half load not permitted", "check skb->hash half load permitted 2",
.insns = { .insns = {
BPF_MOV64_IMM(BPF_REG_0, 0), BPF_MOV64_IMM(BPF_REG_0, 0),
#if __BYTE_ORDER == __LITTLE_ENDIAN #if __BYTE_ORDER == __LITTLE_ENDIAN
...@@ -2182,6 +2179,37 @@ static struct bpf_test tests[] = { ...@@ -2182,6 +2179,37 @@ static struct bpf_test tests[] = {
#else #else
BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1, BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash)), offsetof(struct __sk_buff, hash)),
#endif
BPF_EXIT_INSN(),
},
.result = ACCEPT,
},
{
"check skb->hash half load not permitted, unaligned 1",
.insns = {
BPF_MOV64_IMM(BPF_REG_0, 0),
#if __BYTE_ORDER == __LITTLE_ENDIAN
BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 1),
#else
BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 3),
#endif
BPF_EXIT_INSN(),
},
.errstr = "invalid bpf_context access",
.result = REJECT,
},
{
"check skb->hash half load not permitted, unaligned 3",
.insns = {
BPF_MOV64_IMM(BPF_REG_0, 0),
#if __BYTE_ORDER == __LITTLE_ENDIAN
BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 3),
#else
BPF_LDX_MEM(BPF_H, BPF_REG_0, BPF_REG_1,
offsetof(struct __sk_buff, hash) + 1),
#endif #endif
BPF_EXIT_INSN(), BPF_EXIT_INSN(),
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment