qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH-for-6.1?] target/i386: Fixed size of constant for Windows


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH-for-6.1?] target/i386: Fixed size of constant for Windows
Date: Thu, 12 Aug 2021 13:37:26 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 8/12/21 1:10 PM, Lara Lazier wrote:
> ~0UL has 64 bits on Linux and 32 bits on Windows.

> Fixes: https://gitlab.com/qemu-project/qemu/-/issues/512";.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/512
Fixes: 3407259b20c ("target/i386: Added consistency checks for CR3")

> Reported-by: Volker Rümelin <vr_qemu@t-online.de>
> Signed-off-by: Lara Lazier <laramglazier@gmail.com>
> ---
>  target/i386/tcg/sysemu/misc_helper.c | 2 +-
>  target/i386/tcg/sysemu/svm_helper.c  | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/target/i386/tcg/sysemu/misc_helper.c 
> b/target/i386/tcg/sysemu/misc_helper.c
> index 0a7a58ca9a..91b0fc916b 100644
> --- a/target/i386/tcg/sysemu/misc_helper.c
> +++ b/target/i386/tcg/sysemu/misc_helper.c
> @@ -97,7 +97,7 @@ void helper_write_crN(CPUX86State *env, int reg, 
> target_ulong t0)
>          break;
>      case 3:
>          if ((env->efer & MSR_EFER_LMA) &&
> -                (t0 & ((~0UL) << env_archcpu(env)->phys_bits))) {
> +                (t0 & ((~0ULL) << env_archcpu(env)->phys_bits))) {

Maybe safer to use extract64()? I'm not sure how many bits you want
to check, so used TARGET_LONG_BITS:

            extract64(t0, env_archcpu(env)->phys_bits,
                      TARGET_LONG_BITS - env_archcpu(env)->phys_bits) {

>              cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
>          }
>          if (!(env->efer & MSR_EFER_LMA)) {
> diff --git a/target/i386/tcg/sysemu/svm_helper.c 
> b/target/i386/tcg/sysemu/svm_helper.c
> index 3891f4e4a8..42cd5053e5 100644
> --- a/target/i386/tcg/sysemu/svm_helper.c
> +++ b/target/i386/tcg/sysemu/svm_helper.c
> @@ -290,7 +290,7 @@ void helper_vmrun(CPUX86State *env, int aflag, int 
> next_eip_addend)
>      }
>      new_cr3 = x86_ldq_phys(cs, env->vm_vmcb + offsetof(struct vmcb, 
> save.cr3));
>      if ((env->efer & MSR_EFER_LMA) &&
> -            (new_cr3 & ((~0UL) << cpu->phys_bits))) {
> +            (new_cr3 & ((~0ULL) << cpu->phys_bits))) {
>          cpu_vmexit(env, SVM_EXIT_ERR, 0, GETPC());
>      }
>      new_cr4 = x86_ldq_phys(cs, env->vm_vmcb + offsetof(struct vmcb, 
> save.cr4));
> 

Any idea how to avoid that class of bug? Some CFLAG or plain checkpatch?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]