mirror of https://gitee.com/openkylin/linux.git
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: Andrey Ignatov <rdna@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
46f53a65d2
commit
6c2afb674d
|
@ -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[] = {
|
||||||
#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[] = {
|
||||||
.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[] = {
|
||||||
#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(),
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue