diff options
Diffstat (limited to 'kernel/bpf/core.c')
-rw-r--r-- | kernel/bpf/core.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 8191a7db2777..66088a9e9b9e 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c | |||
@@ -890,7 +890,8 @@ int bpf_jit_get_func_addr(const struct bpf_prog *prog, | |||
890 | 890 | ||
891 | static int bpf_jit_blind_insn(const struct bpf_insn *from, | 891 | static int bpf_jit_blind_insn(const struct bpf_insn *from, |
892 | const struct bpf_insn *aux, | 892 | const struct bpf_insn *aux, |
893 | struct bpf_insn *to_buff) | 893 | struct bpf_insn *to_buff, |
894 | bool emit_zext) | ||
894 | { | 895 | { |
895 | struct bpf_insn *to = to_buff; | 896 | struct bpf_insn *to = to_buff; |
896 | u32 imm_rnd = get_random_int(); | 897 | u32 imm_rnd = get_random_int(); |
@@ -1005,6 +1006,8 @@ static int bpf_jit_blind_insn(const struct bpf_insn *from, | |||
1005 | case 0: /* Part 2 of BPF_LD | BPF_IMM | BPF_DW. */ | 1006 | case 0: /* Part 2 of BPF_LD | BPF_IMM | BPF_DW. */ |
1006 | *to++ = BPF_ALU32_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ aux[0].imm); | 1007 | *to++ = BPF_ALU32_IMM(BPF_MOV, BPF_REG_AX, imm_rnd ^ aux[0].imm); |
1007 | *to++ = BPF_ALU32_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); | 1008 | *to++ = BPF_ALU32_IMM(BPF_XOR, BPF_REG_AX, imm_rnd); |
1009 | if (emit_zext) | ||
1010 | *to++ = BPF_ZEXT_REG(BPF_REG_AX); | ||
1008 | *to++ = BPF_ALU64_REG(BPF_OR, aux[0].dst_reg, BPF_REG_AX); | 1011 | *to++ = BPF_ALU64_REG(BPF_OR, aux[0].dst_reg, BPF_REG_AX); |
1009 | break; | 1012 | break; |
1010 | 1013 | ||
@@ -1088,7 +1091,8 @@ struct bpf_prog *bpf_jit_blind_constants(struct bpf_prog *prog) | |||
1088 | insn[1].code == 0) | 1091 | insn[1].code == 0) |
1089 | memcpy(aux, insn, sizeof(aux)); | 1092 | memcpy(aux, insn, sizeof(aux)); |
1090 | 1093 | ||
1091 | rewritten = bpf_jit_blind_insn(insn, aux, insn_buff); | 1094 | rewritten = bpf_jit_blind_insn(insn, aux, insn_buff, |
1095 | clone->aux->verifier_zext); | ||
1092 | if (!rewritten) | 1096 | if (!rewritten) |
1093 | continue; | 1097 | continue; |
1094 | 1098 | ||