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

div_overflow.c (2538B)


      1/* Just make sure that JITs used udiv/umod as otherwise we get
      2 * an exception from INT_MIN/-1 overflow similarly as with div
      3 * by zero.
      4 */
      5{
      6	"DIV32 overflow, check 1",
      7	.insns = {
      8	BPF_MOV32_IMM(BPF_REG_1, -1),
      9	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
     10	BPF_ALU32_REG(BPF_DIV, BPF_REG_0, BPF_REG_1),
     11	BPF_EXIT_INSN(),
     12	},
     13	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     14	.result = ACCEPT,
     15	.retval = 0,
     16},
     17{
     18	"DIV32 overflow, check 2",
     19	.insns = {
     20	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
     21	BPF_ALU32_IMM(BPF_DIV, BPF_REG_0, -1),
     22	BPF_EXIT_INSN(),
     23	},
     24	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     25	.result = ACCEPT,
     26	.retval = 0,
     27},
     28{
     29	"DIV64 overflow, check 1",
     30	.insns = {
     31	BPF_MOV64_IMM(BPF_REG_1, -1),
     32	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
     33	BPF_ALU64_REG(BPF_DIV, BPF_REG_2, BPF_REG_1),
     34	BPF_MOV32_IMM(BPF_REG_0, 0),
     35	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_2, 1),
     36	BPF_MOV32_IMM(BPF_REG_0, 1),
     37	BPF_EXIT_INSN(),
     38	},
     39	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     40	.result = ACCEPT,
     41	.retval = 0,
     42},
     43{
     44	"DIV64 overflow, check 2",
     45	.insns = {
     46	BPF_LD_IMM64(BPF_REG_1, LLONG_MIN),
     47	BPF_ALU64_IMM(BPF_DIV, BPF_REG_1, -1),
     48	BPF_MOV32_IMM(BPF_REG_0, 0),
     49	BPF_JMP_REG(BPF_JEQ, BPF_REG_0, BPF_REG_1, 1),
     50	BPF_MOV32_IMM(BPF_REG_0, 1),
     51	BPF_EXIT_INSN(),
     52	},
     53	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     54	.result = ACCEPT,
     55	.retval = 0,
     56},
     57{
     58	"MOD32 overflow, check 1",
     59	.insns = {
     60	BPF_MOV32_IMM(BPF_REG_1, -1),
     61	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
     62	BPF_ALU32_REG(BPF_MOD, BPF_REG_0, BPF_REG_1),
     63	BPF_EXIT_INSN(),
     64	},
     65	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     66	.result = ACCEPT,
     67	.retval = INT_MIN,
     68},
     69{
     70	"MOD32 overflow, check 2",
     71	.insns = {
     72	BPF_MOV32_IMM(BPF_REG_0, INT_MIN),
     73	BPF_ALU32_IMM(BPF_MOD, BPF_REG_0, -1),
     74	BPF_EXIT_INSN(),
     75	},
     76	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     77	.result = ACCEPT,
     78	.retval = INT_MIN,
     79},
     80{
     81	"MOD64 overflow, check 1",
     82	.insns = {
     83	BPF_MOV64_IMM(BPF_REG_1, -1),
     84	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
     85	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
     86	BPF_ALU64_REG(BPF_MOD, BPF_REG_2, BPF_REG_1),
     87	BPF_MOV32_IMM(BPF_REG_0, 0),
     88	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
     89	BPF_MOV32_IMM(BPF_REG_0, 1),
     90	BPF_EXIT_INSN(),
     91	},
     92	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
     93	.result = ACCEPT,
     94	.retval = 1,
     95},
     96{
     97	"MOD64 overflow, check 2",
     98	.insns = {
     99	BPF_LD_IMM64(BPF_REG_2, LLONG_MIN),
    100	BPF_MOV64_REG(BPF_REG_3, BPF_REG_2),
    101	BPF_ALU64_IMM(BPF_MOD, BPF_REG_2, -1),
    102	BPF_MOV32_IMM(BPF_REG_0, 0),
    103	BPF_JMP_REG(BPF_JNE, BPF_REG_3, BPF_REG_2, 1),
    104	BPF_MOV32_IMM(BPF_REG_0, 1),
    105	BPF_EXIT_INSN(),
    106	},
    107	.prog_type = BPF_PROG_TYPE_SCHED_CLS,
    108	.result = ACCEPT,
    109	.retval = 1,
    110},