Linux Audio

Check our new training course

Embedded Linux training

Mar 10-20, 2025, special US time zones
Register
Loading...
Note: File does not exist in v6.13.7.
  1{
  2	"check deducing bounds from const, 1",
  3	.insns = {
  4		BPF_MOV64_IMM(BPF_REG_0, 1),
  5		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 0),
  6		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
  7		BPF_EXIT_INSN(),
  8	},
  9	.result = REJECT,
 10	.errstr = "R0 tried to subtract pointer from scalar",
 11},
 12{
 13	"check deducing bounds from const, 2",
 14	.insns = {
 15		BPF_MOV64_IMM(BPF_REG_0, 1),
 16		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1),
 17		BPF_EXIT_INSN(),
 18		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 1, 1),
 19		BPF_EXIT_INSN(),
 20		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
 21		BPF_EXIT_INSN(),
 22	},
 23	.result = ACCEPT,
 24	.retval = 1,
 25},
 26{
 27	"check deducing bounds from const, 3",
 28	.insns = {
 29		BPF_MOV64_IMM(BPF_REG_0, 0),
 30		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
 31		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
 32		BPF_EXIT_INSN(),
 33	},
 34	.result = REJECT,
 35	.errstr = "R0 tried to subtract pointer from scalar",
 36},
 37{
 38	"check deducing bounds from const, 4",
 39	.insns = {
 40		BPF_MOV64_IMM(BPF_REG_0, 0),
 41		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1),
 42		BPF_EXIT_INSN(),
 43		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
 44		BPF_EXIT_INSN(),
 45		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
 46		BPF_EXIT_INSN(),
 47	},
 48	.result = ACCEPT,
 49},
 50{
 51	"check deducing bounds from const, 5",
 52	.insns = {
 53		BPF_MOV64_IMM(BPF_REG_0, 0),
 54		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1),
 55		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
 56		BPF_EXIT_INSN(),
 57	},
 58	.result = REJECT,
 59	.errstr = "R0 tried to subtract pointer from scalar",
 60},
 61{
 62	"check deducing bounds from const, 6",
 63	.insns = {
 64		BPF_MOV64_IMM(BPF_REG_0, 0),
 65		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
 66		BPF_EXIT_INSN(),
 67		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
 68		BPF_EXIT_INSN(),
 69	},
 70	.result = REJECT,
 71	.errstr = "R0 tried to subtract pointer from scalar",
 72},
 73{
 74	"check deducing bounds from const, 7",
 75	.insns = {
 76		BPF_MOV64_IMM(BPF_REG_0, ~0),
 77		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
 78		BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
 79		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
 80			    offsetof(struct __sk_buff, mark)),
 81		BPF_EXIT_INSN(),
 82	},
 83	.result = REJECT,
 84	.errstr = "dereference of modified ctx ptr",
 85	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
 86},
 87{
 88	"check deducing bounds from const, 8",
 89	.insns = {
 90		BPF_MOV64_IMM(BPF_REG_0, ~0),
 91		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
 92		BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_0),
 93		BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
 94			    offsetof(struct __sk_buff, mark)),
 95		BPF_EXIT_INSN(),
 96	},
 97	.result = REJECT,
 98	.errstr = "dereference of modified ctx ptr",
 99	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
100},
101{
102	"check deducing bounds from const, 9",
103	.insns = {
104		BPF_MOV64_IMM(BPF_REG_0, 0),
105		BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
106		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
107		BPF_EXIT_INSN(),
108	},
109	.result = REJECT,
110	.errstr = "R0 tried to subtract pointer from scalar",
111},
112{
113	"check deducing bounds from const, 10",
114	.insns = {
115		BPF_MOV64_IMM(BPF_REG_0, 0),
116		BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
117		/* Marks reg as unknown. */
118		BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0),
119		BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
120		BPF_EXIT_INSN(),
121	},
122	.result = REJECT,
123	.errstr = "math between ctx pointer and register with unbounded min value is not allowed",
124},