|
|
@@ -951,6 +951,32 @@ static struct bpf_test tests[] = {
|
|
|
{ 4, 4, 4, 3, 3 },
|
|
|
{ { 2, 0 }, { 3, 1 }, { 4, MAX_K } },
|
|
|
},
|
|
|
+ {
|
|
|
+ "JGE (jt 0), test 1",
|
|
|
+ .u.insns = {
|
|
|
+ BPF_STMT(BPF_LDX | BPF_LEN, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
|
|
|
+ BPF_STMT(BPF_RET | BPF_K, 1),
|
|
|
+ BPF_STMT(BPF_RET | BPF_K, MAX_K)
|
|
|
+ },
|
|
|
+ CLASSIC,
|
|
|
+ { 4, 4, 4, 3, 3 },
|
|
|
+ { { 2, 0 }, { 3, 1 }, { 4, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JGE (jt 0), test 2",
|
|
|
+ .u.insns = {
|
|
|
+ BPF_STMT(BPF_LDX | BPF_LEN, 0),
|
|
|
+ BPF_STMT(BPF_LD | BPF_B | BPF_ABS, 2),
|
|
|
+ BPF_JUMP(BPF_JMP | BPF_JGE | BPF_X, 0, 0, 1),
|
|
|
+ BPF_STMT(BPF_RET | BPF_K, 1),
|
|
|
+ BPF_STMT(BPF_RET | BPF_K, MAX_K)
|
|
|
+ },
|
|
|
+ CLASSIC,
|
|
|
+ { 4, 4, 5, 3, 3 },
|
|
|
+ { { 4, 1 }, { 5, 1 }, { 6, MAX_K } },
|
|
|
+ },
|
|
|
{
|
|
|
"JGE",
|
|
|
.u.insns = {
|
|
|
@@ -4492,6 +4518,35 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JSLT | BPF_K */
|
|
|
+ {
|
|
|
+ "JMP_JSLT_K: Signed jump: if (-2 < -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
|
|
|
+ BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLT_K: Signed jump: if (-1 < -1) return 0",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
|
|
|
+ BPF_JMP_IMM(BPF_JSLT, R1, -1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JSGT | BPF_K */
|
|
|
{
|
|
|
"JMP_JSGT_K: Signed jump: if (-1 > -2) return 1",
|
|
|
@@ -4521,6 +4576,73 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JSLE | BPF_K */
|
|
|
+ {
|
|
|
+ "JMP_JSLE_K: Signed jump: if (-2 <= -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 0xfffffffffffffffeLL),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLE_K: Signed jump: if (-1 <= -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 0xffffffffffffffffLL),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, -1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLE_K: Signed jump: value walk 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 6),
|
|
|
+ BPF_ALU64_IMM(BPF_SUB, R1, 1),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
|
|
|
+ BPF_ALU64_IMM(BPF_SUB, R1, 1),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
|
|
|
+ BPF_ALU64_IMM(BPF_SUB, R1, 1),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
|
|
|
+ BPF_EXIT_INSN(), /* bad exit */
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLE_K: Signed jump: value walk 2",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 4),
|
|
|
+ BPF_ALU64_IMM(BPF_SUB, R1, 2),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 2),
|
|
|
+ BPF_ALU64_IMM(BPF_SUB, R1, 2),
|
|
|
+ BPF_JMP_IMM(BPF_JSLE, R1, 0, 1),
|
|
|
+ BPF_EXIT_INSN(), /* bad exit */
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1), /* good exit */
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JSGE | BPF_K */
|
|
|
{
|
|
|
"JMP_JSGE_K: Signed jump: if (-1 >= -2) return 1",
|
|
|
@@ -4617,6 +4739,35 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JLT | BPF_K */
|
|
|
+ {
|
|
|
+ "JMP_JLT_K: if (2 < 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 2),
|
|
|
+ BPF_JMP_IMM(BPF_JLT, R1, 3, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JGT_K: Unsigned jump: if (1 < -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 1),
|
|
|
+ BPF_JMP_IMM(BPF_JLT, R1, -1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JGE | BPF_K */
|
|
|
{
|
|
|
"JMP_JGE_K: if (3 >= 2) return 1",
|
|
|
@@ -4632,6 +4783,21 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JLE | BPF_K */
|
|
|
+ {
|
|
|
+ "JMP_JLE_K: if (2 <= 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 2),
|
|
|
+ BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JGT | BPF_K jump backwards */
|
|
|
{
|
|
|
"JMP_JGT_K: if (3 > 2) return 1 (jump backwards)",
|
|
|
@@ -4662,6 +4828,36 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JLT | BPF_K jump backwards */
|
|
|
+ {
|
|
|
+ "JMP_JGT_K: if (2 < 3) return 1 (jump backwards)",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_JMP_IMM(BPF_JA, 0, 0, 2), /* goto start */
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1), /* out: */
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0), /* start: */
|
|
|
+ BPF_LD_IMM64(R1, 2), /* note: this takes 2 insns */
|
|
|
+ BPF_JMP_IMM(BPF_JLT, R1, 3, -6), /* goto out */
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JLE_K: if (3 <= 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_JMP_IMM(BPF_JLE, R1, 3, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JNE | BPF_K */
|
|
|
{
|
|
|
"JMP_JNE_K: if (3 != 2) return 1",
|
|
|
@@ -4752,6 +4948,37 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JSLT | BPF_X */
|
|
|
+ {
|
|
|
+ "JMP_JSLT_X: Signed jump: if (-2 < -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, -1),
|
|
|
+ BPF_LD_IMM64(R2, -2),
|
|
|
+ BPF_JMP_REG(BPF_JSLT, R2, R1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLT_X: Signed jump: if (-1 < -1) return 0",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_LD_IMM64(R1, -1),
|
|
|
+ BPF_LD_IMM64(R2, -1),
|
|
|
+ BPF_JMP_REG(BPF_JSLT, R1, R2, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JSGE | BPF_X */
|
|
|
{
|
|
|
"JMP_JSGE_X: Signed jump: if (-1 >= -2) return 1",
|
|
|
@@ -4783,6 +5010,37 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JSLE | BPF_X */
|
|
|
+ {
|
|
|
+ "JMP_JSLE_X: Signed jump: if (-2 <= -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, -1),
|
|
|
+ BPF_LD_IMM64(R2, -2),
|
|
|
+ BPF_JMP_REG(BPF_JSLE, R2, R1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JSLE_X: Signed jump: if (-1 <= -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, -1),
|
|
|
+ BPF_LD_IMM64(R2, -1),
|
|
|
+ BPF_JMP_REG(BPF_JSLE, R1, R2, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JGT | BPF_X */
|
|
|
{
|
|
|
"JMP_JGT_X: if (3 > 2) return 1",
|
|
|
@@ -4814,6 +5072,37 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JLT | BPF_X */
|
|
|
+ {
|
|
|
+ "JMP_JLT_X: if (2 < 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 2),
|
|
|
+ BPF_JMP_REG(BPF_JLT, R2, R1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JLT_X: Unsigned jump: if (1 < -1) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, -1),
|
|
|
+ BPF_LD_IMM64(R2, 1),
|
|
|
+ BPF_JMP_REG(BPF_JLT, R2, R1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JGE | BPF_X */
|
|
|
{
|
|
|
"JMP_JGE_X: if (3 >= 2) return 1",
|
|
|
@@ -4845,6 +5134,37 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ /* BPF_JMP | BPF_JLE | BPF_X */
|
|
|
+ {
|
|
|
+ "JMP_JLE_X: if (2 <= 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 2),
|
|
|
+ BPF_JMP_REG(BPF_JLE, R2, R1, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JLE_X: if (3 <= 3) return 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 3),
|
|
|
+ BPF_JMP_REG(BPF_JLE, R1, R2, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
{
|
|
|
/* Mainly testing JIT + imm64 here. */
|
|
|
"JMP_JGE_X: ldimm64 test 1",
|
|
|
@@ -4890,6 +5210,50 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 1 } },
|
|
|
},
|
|
|
+ {
|
|
|
+ "JMP_JLE_X: ldimm64 test 1",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 2),
|
|
|
+ BPF_JMP_REG(BPF_JLE, R2, R1, 2),
|
|
|
+ BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
|
|
|
+ BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0xeeeeeeeeU } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JLE_X: ldimm64 test 2",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 0),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 2),
|
|
|
+ BPF_JMP_REG(BPF_JLE, R2, R1, 0),
|
|
|
+ BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0xffffffffU } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "JMP_JLE_X: ldimm64 test 3",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_ALU32_IMM(BPF_MOV, R0, 1),
|
|
|
+ BPF_LD_IMM64(R1, 3),
|
|
|
+ BPF_LD_IMM64(R2, 2),
|
|
|
+ BPF_JMP_REG(BPF_JLE, R2, R1, 4),
|
|
|
+ BPF_LD_IMM64(R0, 0xffffffffffffffffULL),
|
|
|
+ BPF_LD_IMM64(R0, 0xeeeeeeeeeeeeeeeeULL),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 1 } },
|
|
|
+ },
|
|
|
/* BPF_JMP | BPF_JNE | BPF_X */
|
|
|
{
|
|
|
"JMP_JNE_X: if (3 != 2) return 1",
|