Re: [PATCH v7 16/26] x86/insn-eval: Support both signed 32-bit and 64-bit effective addresses

Borislav Petkov <[email protected]> Wed, 7 Jun 2017 17:49:24 +0200
Newsgroups org.kernel.vger.linux-msdos,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Fri, May 05, 2017 at 11:17:14AM -0700, Ricardo Neri wrote:
> @@ -697,18 +753,21 @@ void __user *insn_get_addr_ref(struct insn *insn, struct pt_regs *regs)
>  {
>  	unsigned long linear_addr, seg_base_addr, seg_limit;
>  	long eff_addr, base, indx;
> -	int addr_offset, base_offset, indx_offset;
> +	int addr_offset, base_offset, indx_offset, addr_bytes;
>  	insn_byte_t sib;
>  
>  	insn_get_modrm(insn);
>  	insn_get_sib(insn);
>  	sib = insn->sib.value;
> +	addr_bytes = insn->addr_bytes;
>  
>  	if (X86_MODRM_MOD(insn->modrm.value) == 3) {
>  		addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM);
>  		if (addr_offset < 0)
>  			goto out_err;
> -		eff_addr = regs_get_register(regs, addr_offset);
> +		eff_addr = get_mem_offset(regs, addr_offset, addr_bytes);
> +		if (eff_addr == -1L)
> +			goto out_err;
>  		seg_base_addr = insn_get_seg_base(regs, insn, addr_offset);
>  		if (seg_base_addr == -1L)
>  			goto out_err;

This code here is too dense, it needs spacing for better readability.

-- 
Regards/Gruss,
    Boris.

SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
--