Kaynağa Gözat

src/lib.rs: fix sign extension for MOV32_IMM (interpreter)

Looks like we were missing a cast to u32 when moving the immediate value
to the destination register, for the MOV32_IMM instruction. Let's fix.

Reported by @jackcmay.
Fixes #49.
Quentin Monnet 5 yıl önce
ebeveyn
işleme
f983ff2163
1 değiştirilmiş dosya ile 1 ekleme ve 1 silme
  1. 1 1
      src/lib.rs

+ 1 - 1
src/lib.rs

@@ -478,7 +478,7 @@ impl<'a> EbpfVmMbuff<'a> {
                 },
                 ebpf::XOR32_IMM  =>   reg[_dst] = (reg[_dst] as u32             ^ insn.imm  as u32) as u64,
                 ebpf::XOR32_REG  =>   reg[_dst] = (reg[_dst] as u32             ^ reg[_src] as u32) as u64,
-                ebpf::MOV32_IMM  =>   reg[_dst] = insn.imm                                          as u64,
+                ebpf::MOV32_IMM  =>   reg[_dst] = insn.imm   as u32                                 as u64,
                 ebpf::MOV32_REG  =>   reg[_dst] = (reg[_src] as u32)                                as u64,
                 ebpf::ARSH32_IMM => { reg[_dst] = (reg[_dst] as i32).wrapping_shr(insn.imm  as u32) as u64; reg[_dst] &= U32MAX; },
                 ebpf::ARSH32_REG => { reg[_dst] = (reg[_dst] as i32).wrapping_shr(reg[_src] as u32) as u64; reg[_dst] &= U32MAX; },