summaryrefslogblamecommitdiffstats
path: root/tools/testing/selftests/bpf/verifier/masking.c
blob: 6e1358c544fdc75b8f89db4afde1aeeb637fb5be (plain) (tree)

































































































































































































































































































































                                                     
{
	"masking, test out of bounds 1",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 5),
	BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 2",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 1),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 3",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0xffffffff),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 4",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0xffffffff),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 5",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, -1),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 6",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, -1),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 7",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, 5),
	BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 8",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, 1),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 9",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, 0xffffffff),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 10",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, 0xffffffff),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 11",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, -1),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test out of bounds 12",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_1, -1),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test in bounds 1",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 4),
	BPF_MOV32_IMM(BPF_REG_2, 5 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 4,
},
{
	"masking, test in bounds 2",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test in bounds 3",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0xfffffffe),
	BPF_MOV32_IMM(BPF_REG_2, 0xffffffff - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0xfffffffe,
},
{
	"masking, test in bounds 4",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0xabcde),
	BPF_MOV32_IMM(BPF_REG_2, 0xabcdef - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0xabcde,
},
{
	"masking, test in bounds 5",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 0),
	BPF_MOV32_IMM(BPF_REG_2, 1 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},
{
	"masking, test in bounds 6",
	.insns = {
	BPF_MOV32_IMM(BPF_REG_1, 46),
	BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_1),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_1, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 46,
},
{
	"masking, test in bounds 7",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_3, -46),
	BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1),
	BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 46,
},
{
	"masking, test in bounds 8",
	.insns = {
	BPF_MOV64_IMM(BPF_REG_3, -47),
	BPF_ALU64_IMM(BPF_MUL, BPF_REG_3, -1),
	BPF_MOV32_IMM(BPF_REG_2, 47 - 1),
	BPF_ALU64_REG(BPF_SUB, BPF_REG_2, BPF_REG_3),
	BPF_ALU64_REG(BPF_OR, BPF_REG_2, BPF_REG_3),
	BPF_ALU64_IMM(BPF_NEG, BPF_REG_2, 0),
	BPF_ALU64_IMM(BPF_ARSH, BPF_REG_2, 63),
	BPF_ALU64_REG(BPF_AND, BPF_REG_3, BPF_REG_2),
	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
	BPF_EXIT_INSN(),
	},
	.result = ACCEPT,
	.retval = 0,
},