cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

jset.c (4160B)


      1{
      2	"jset: functional",
      3	.insns = {
      4	BPF_DIRECT_PKT_R2,
      5	BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
      6
      7	/* reg, bit 63 or bit 0 set, taken */
      8	BPF_LD_IMM64(BPF_REG_8, 0x8000000000000001),
      9	BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
     10	BPF_EXIT_INSN(),
     11
     12	/* reg, bit 62, not taken */
     13	BPF_LD_IMM64(BPF_REG_8, 0x4000000000000000),
     14	BPF_JMP_REG(BPF_JSET, BPF_REG_7, BPF_REG_8, 1),
     15	BPF_JMP_IMM(BPF_JA, 0, 0, 1),
     16	BPF_EXIT_INSN(),
     17
     18	/* imm, any bit set, taken */
     19	BPF_JMP_IMM(BPF_JSET, BPF_REG_7, -1, 1),
     20	BPF_EXIT_INSN(),
     21
     22	/* imm, bit 31 set, taken */
     23	BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1),
     24	BPF_EXIT_INSN(),
     25
     26	/* all good - return r0 == 2 */
     27	BPF_MOV64_IMM(BPF_REG_0, 2),
     28	BPF_EXIT_INSN(),
     29	},
     30	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     31	.result = ACCEPT,
     32	.runs = 7,
     33	.retvals = {
     34		{ .retval = 2,
     35		  .data64 = { (1ULL << 63) | (1U << 31) | (1U << 0), }
     36		},
     37		{ .retval = 2,
     38		  .data64 = { (1ULL << 63) | (1U << 31), }
     39		},
     40		{ .retval = 2,
     41		  .data64 = { (1ULL << 31) | (1U << 0), }
     42		},
     43		{ .retval = 2,
     44		  .data64 = { (__u32)-1, }
     45		},
     46		{ .retval = 2,
     47		  .data64 = { ~0x4000000000000000ULL, }
     48		},
     49		{ .retval = 0,
     50		  .data64 = { 0, }
     51		},
     52		{ .retval = 0,
     53		  .data64 = { ~0ULL, }
     54		},
     55	},
     56	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
     57},
     58{
     59	"jset: sign-extend",
     60	.insns = {
     61	BPF_DIRECT_PKT_R2,
     62	BPF_LDX_MEM(BPF_DW, BPF_REG_7, BPF_REG_2, 0),
     63
     64	BPF_JMP_IMM(BPF_JSET, BPF_REG_7, 0x80000000, 1),
     65	BPF_EXIT_INSN(),
     66
     67	BPF_MOV64_IMM(BPF_REG_0, 2),
     68	BPF_EXIT_INSN(),
     69	},
     70	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     71	.result = ACCEPT,
     72	.retval = 2,
     73	.data = { 1, 0, 0, 0, 0, 0, 0, 1, },
     74	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
     75},
     76{
     77	"jset: known const compare",
     78	.insns = {
     79	BPF_MOV64_IMM(BPF_REG_0, 1),
     80	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
     81	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
     82	BPF_EXIT_INSN(),
     83	},
     84	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
     85	.errstr_unpriv = "R9 !read_ok",
     86	.result_unpriv = REJECT,
     87	.retval = 1,
     88	.result = ACCEPT,
     89},
     90{
     91	"jset: known const compare bad",
     92	.insns = {
     93	BPF_MOV64_IMM(BPF_REG_0, 0),
     94	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
     95	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
     96	BPF_EXIT_INSN(),
     97	},
     98	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
     99	.errstr_unpriv = "!read_ok",
    100	.result_unpriv = REJECT,
    101	.errstr = "!read_ok",
    102	.result = REJECT,
    103},
    104{
    105	"jset: unknown const compare taken",
    106	.insns = {
    107	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
    108	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
    109	BPF_JMP_IMM(BPF_JA, 0, 0, 1),
    110	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
    111	BPF_EXIT_INSN(),
    112	},
    113	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
    114	.errstr_unpriv = "!read_ok",
    115	.result_unpriv = REJECT,
    116	.errstr = "!read_ok",
    117	.result = REJECT,
    118},
    119{
    120	"jset: unknown const compare not taken",
    121	.insns = {
    122	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
    123	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 1, 1),
    124	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
    125	BPF_EXIT_INSN(),
    126	},
    127	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
    128	.errstr_unpriv = "!read_ok",
    129	.result_unpriv = REJECT,
    130	.errstr = "!read_ok",
    131	.result = REJECT,
    132},
    133{
    134	"jset: half-known const compare",
    135	.insns = {
    136	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
    137	BPF_ALU64_IMM(BPF_OR, BPF_REG_0, 2),
    138	BPF_JMP_IMM(BPF_JSET, BPF_REG_0, 3, 1),
    139	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
    140	BPF_MOV64_IMM(BPF_REG_0, 0),
    141	BPF_EXIT_INSN(),
    142	},
    143	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
    144	.errstr_unpriv = "R9 !read_ok",
    145	.result_unpriv = REJECT,
    146	.result = ACCEPT,
    147},
    148{
    149	"jset: range",
    150	.insns = {
    151	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32),
    152	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
    153	BPF_MOV64_IMM(BPF_REG_0, 0),
    154	BPF_ALU64_IMM(BPF_AND, BPF_REG_1, 0xff),
    155	BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0xf0, 3),
    156	BPF_JMP_IMM(BPF_JLT, BPF_REG_1, 0x10, 1),
    157	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
    158	BPF_EXIT_INSN(),
    159	BPF_JMP_IMM(BPF_JSET, BPF_REG_1, 0x10, 1),
    160	BPF_EXIT_INSN(),
    161	BPF_JMP_IMM(BPF_JGE, BPF_REG_1, 0x10, 1),
    162	BPF_LDX_MEM(BPF_B, BPF_REG_8, BPF_REG_9, 0),
    163	BPF_EXIT_INSN(),
    164	},
    165	.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
    166	.errstr_unpriv = "R9 !read_ok",
    167	.result_unpriv = REJECT,
    168	.result = ACCEPT,
    169},