|
@@ -1391,6 +1391,100 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ }
|
|
|
},
|
|
|
+ {
|
|
|
+ "JUMPS + HOLES",
|
|
|
+ .u.insns = {
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 15),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 3, 4),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90c2894d, 1, 2),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 2, 3),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x2ac28349, 1, 2),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE, 0, 14, 15),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE, 0, 13, 14),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 2, 3),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JEQ, 0x90d2ff41, 1, 2),
|
|
|
+ BPF_STMT(BPF_LD | BPF_H | BPF_ABS, 0),
|
|
|
+ BPF_STMT(BPF_RET | BPF_A, 0),
|
|
|
+ BPF_STMT(BPF_RET | BPF_A, 0),
|
|
|
+ },
|
|
|
+ CLASSIC,
|
|
|
+ { 0x00, 0x1b, 0x21, 0x3c, 0x9d, 0xf8, 0x90, 0xe2,
|
|
|
+ 0xba, 0x0a, 0x56, 0xb4, 0x08, 0x00, 0x45, 0x00,
|
|
|
+ 0x00, 0x28, 0x00, 0x00, 0x20, 0x00, 0x40, 0x11,
|
|
|
+ 0x00, 0x00, 0xc0, 0xa8, 0x33, 0x01, 0xc0, 0xa8,
|
|
|
+ 0x33, 0x02, 0xbb, 0xb6, 0xa9, 0xfa, 0x00, 0x14,
|
|
|
+ 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
|
|
|
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
|
|
|
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
|
|
|
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
|
|
|
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
|
|
|
+ 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc },
|
|
|
+ { { 88, 0x001b } }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "check: RET X",
|
|
|
+ .u.insns = {
|
|
|
+ BPF_STMT(BPF_RET | BPF_X, 0),
|
|
|
+ },
|
|
|
+ CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
|
|
|
+ { },
|
|
|
+ { },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "check: LDX + RET X",
|
|
|
+ .u.insns = {
|
|
|
+ BPF_STMT(BPF_LDX | BPF_IMM, 42),
|
|
|
+ BPF_STMT(BPF_RET | BPF_X, 0),
|
|
|
+ },
|
|
|
+ CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
|
|
|
+ { },
|
|
|
+ { },
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static struct net_device dev;
|