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

meta_access.c (7469B)


      1{
      2	"meta access, test1",
      3	.insns = {
      4	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
      5		    offsetof(struct xdp_md, data_meta)),
      6	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
      7	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
      8	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
      9	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
     10	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
     11	BPF_MOV64_IMM(BPF_REG_0, 0),
     12	BPF_EXIT_INSN(),
     13	},
     14	.result = ACCEPT,
     15	.prog_type = BPF_PROG_TYPE_XDP,
     16},
     17{
     18	"meta access, test2",
     19	.insns = {
     20	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
     21		    offsetof(struct xdp_md, data_meta)),
     22	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
     23	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
     24	BPF_ALU64_IMM(BPF_SUB, BPF_REG_0, 8),
     25	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
     26	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
     27	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
     28	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_0, 0),
     29	BPF_MOV64_IMM(BPF_REG_0, 0),
     30	BPF_EXIT_INSN(),
     31	},
     32	.result = REJECT,
     33	.errstr = "invalid access to packet, off=-8",
     34	.prog_type = BPF_PROG_TYPE_XDP,
     35},
     36{
     37	"meta access, test3",
     38	.insns = {
     39	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
     40		    offsetof(struct xdp_md, data_meta)),
     41	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
     42		    offsetof(struct xdp_md, data_end)),
     43	BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
     44	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
     45	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
     46	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
     47	BPF_MOV64_IMM(BPF_REG_0, 0),
     48	BPF_EXIT_INSN(),
     49	},
     50	.result = REJECT,
     51	.errstr = "invalid access to packet",
     52	.prog_type = BPF_PROG_TYPE_XDP,
     53},
     54{
     55	"meta access, test4",
     56	.insns = {
     57	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
     58		    offsetof(struct xdp_md, data_meta)),
     59	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
     60		    offsetof(struct xdp_md, data_end)),
     61	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)),
     62	BPF_MOV64_REG(BPF_REG_0, BPF_REG_4),
     63	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
     64	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_3, 1),
     65	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
     66	BPF_MOV64_IMM(BPF_REG_0, 0),
     67	BPF_EXIT_INSN(),
     68	},
     69	.result = REJECT,
     70	.errstr = "invalid access to packet",
     71	.prog_type = BPF_PROG_TYPE_XDP,
     72},
     73{
     74	"meta access, test5",
     75	.insns = {
     76	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1,
     77		    offsetof(struct xdp_md, data_meta)),
     78	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1, offsetof(struct xdp_md, data)),
     79	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
     80	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
     81	BPF_JMP_REG(BPF_JGT, BPF_REG_0, BPF_REG_4, 3),
     82	BPF_MOV64_IMM(BPF_REG_2, -8),
     83	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_xdp_adjust_meta),
     84	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0),
     85	BPF_MOV64_IMM(BPF_REG_0, 0),
     86	BPF_EXIT_INSN(),
     87	},
     88	.result = REJECT,
     89	.errstr = "R3 !read_ok",
     90	.prog_type = BPF_PROG_TYPE_XDP,
     91},
     92{
     93	"meta access, test6",
     94	.insns = {
     95	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
     96		    offsetof(struct xdp_md, data_meta)),
     97	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
     98	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
     99	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
    100	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
    101	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
    102	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 1),
    103	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
    104	BPF_MOV64_IMM(BPF_REG_0, 0),
    105	BPF_EXIT_INSN(),
    106	},
    107	.result = REJECT,
    108	.errstr = "invalid access to packet",
    109	.prog_type = BPF_PROG_TYPE_XDP,
    110},
    111{
    112	"meta access, test7",
    113	.insns = {
    114	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    115		    offsetof(struct xdp_md, data_meta)),
    116	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    117	BPF_MOV64_REG(BPF_REG_0, BPF_REG_3),
    118	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),
    119	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
    120	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 8),
    121	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
    122	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
    123	BPF_MOV64_IMM(BPF_REG_0, 0),
    124	BPF_EXIT_INSN(),
    125	},
    126	.result = ACCEPT,
    127	.prog_type = BPF_PROG_TYPE_XDP,
    128},
    129{
    130	"meta access, test8",
    131	.insns = {
    132	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    133		    offsetof(struct xdp_md, data_meta)),
    134	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    135	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
    136	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF),
    137	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
    138	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
    139	BPF_MOV64_IMM(BPF_REG_0, 0),
    140	BPF_EXIT_INSN(),
    141	},
    142	.result = ACCEPT,
    143	.prog_type = BPF_PROG_TYPE_XDP,
    144},
    145{
    146	"meta access, test9",
    147	.insns = {
    148	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    149		    offsetof(struct xdp_md, data_meta)),
    150	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    151	BPF_MOV64_REG(BPF_REG_4, BPF_REG_2),
    152	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 0xFFFF),
    153	BPF_ALU64_IMM(BPF_ADD, BPF_REG_4, 1),
    154	BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_3, 1),
    155	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
    156	BPF_MOV64_IMM(BPF_REG_0, 0),
    157	BPF_EXIT_INSN(),
    158	},
    159	.result = REJECT,
    160	.errstr = "invalid access to packet",
    161	.prog_type = BPF_PROG_TYPE_XDP,
    162},
    163{
    164	"meta access, test10",
    165	.insns = {
    166	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    167		    offsetof(struct xdp_md, data_meta)),
    168	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    169	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
    170		    offsetof(struct xdp_md, data_end)),
    171	BPF_MOV64_IMM(BPF_REG_5, 42),
    172	BPF_MOV64_IMM(BPF_REG_6, 24),
    173	BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8),
    174	BPF_ATOMIC_OP(BPF_DW, BPF_ADD, BPF_REG_10, BPF_REG_6, -8),
    175	BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8),
    176	BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6),
    177	BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_5),
    178	BPF_MOV64_REG(BPF_REG_5, BPF_REG_3),
    179	BPF_MOV64_REG(BPF_REG_6, BPF_REG_2),
    180	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
    181	BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_5, 1),
    182	BPF_LDX_MEM(BPF_B, BPF_REG_2, BPF_REG_2, 0),
    183	BPF_MOV64_IMM(BPF_REG_0, 0),
    184	BPF_EXIT_INSN(),
    185	},
    186	.result = REJECT,
    187	.errstr = "invalid access to packet",
    188	.prog_type = BPF_PROG_TYPE_XDP,
    189},
    190{
    191	"meta access, test11",
    192	.insns = {
    193	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    194		    offsetof(struct xdp_md, data_meta)),
    195	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    196	BPF_MOV64_IMM(BPF_REG_5, 42),
    197	BPF_MOV64_IMM(BPF_REG_6, 24),
    198	BPF_STX_MEM(BPF_DW, BPF_REG_10, BPF_REG_5, -8),
    199	BPF_ATOMIC_OP(BPF_DW, BPF_ADD, BPF_REG_10, BPF_REG_6, -8),
    200	BPF_LDX_MEM(BPF_DW, BPF_REG_5, BPF_REG_10, -8),
    201	BPF_JMP_IMM(BPF_JGT, BPF_REG_5, 100, 6),
    202	BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_5),
    203	BPF_MOV64_REG(BPF_REG_5, BPF_REG_2),
    204	BPF_MOV64_REG(BPF_REG_6, BPF_REG_2),
    205	BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 8),
    206	BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_3, 1),
    207	BPF_LDX_MEM(BPF_B, BPF_REG_5, BPF_REG_5, 0),
    208	BPF_MOV64_IMM(BPF_REG_0, 0),
    209	BPF_EXIT_INSN(),
    210	},
    211	.result = ACCEPT,
    212	.prog_type = BPF_PROG_TYPE_XDP,
    213},
    214{
    215	"meta access, test12",
    216	.insns = {
    217	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1,
    218		    offsetof(struct xdp_md, data_meta)),
    219	BPF_LDX_MEM(BPF_W, BPF_REG_3, BPF_REG_1, offsetof(struct xdp_md, data)),
    220	BPF_LDX_MEM(BPF_W, BPF_REG_4, BPF_REG_1,
    221		    offsetof(struct xdp_md, data_end)),
    222	BPF_MOV64_REG(BPF_REG_5, BPF_REG_3),
    223	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16),
    224	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_4, 5),
    225	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_3, 0),
    226	BPF_MOV64_REG(BPF_REG_5, BPF_REG_2),
    227	BPF_ALU64_IMM(BPF_ADD, BPF_REG_5, 16),
    228	BPF_JMP_REG(BPF_JGT, BPF_REG_5, BPF_REG_3, 1),
    229	BPF_LDX_MEM(BPF_B, BPF_REG_0, BPF_REG_2, 0),
    230	BPF_MOV64_IMM(BPF_REG_0, 0),
    231	BPF_EXIT_INSN(),
    232	},
    233	.result = ACCEPT,
    234	.prog_type = BPF_PROG_TYPE_XDP,
    235},