323 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			323 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| {
 | |
| 	"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,
 | |
| },
 |