On Wed, 15 Sept 2021 at 19:10, Alexander Graf <ag...@csgraf.de> wrote:
>
> Hvf's permission bitmap during and after dirty logging does not include
> the HV_MEMORY_EXEC permission. At least on Apple Silicon, this leads to
> instruction faults once dirty logging was enabled.
>
> Add the bit to make it work properly.
>
> Signed-off-by: Alexander Graf <ag...@csgraf.de>
> ---
>  accel/hvf/hvf-accel-ops.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/accel/hvf/hvf-accel-ops.c b/accel/hvf/hvf-accel-ops.c
> index d1691be989..71cc2fa70f 100644
> --- a/accel/hvf/hvf-accel-ops.c
> +++ b/accel/hvf/hvf-accel-ops.c
> @@ -239,12 +239,12 @@ static void hvf_set_dirty_tracking(MemoryRegionSection 
> *section, bool on)
>      if (on) {
>          slot->flags |= HVF_SLOT_LOG;
>          hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
> -                      HV_MEMORY_READ);
> +                      HV_MEMORY_READ | HV_MEMORY_EXEC);
>      /* stop tracking region*/
>      } else {
>          slot->flags &= ~HVF_SLOT_LOG;
>          hv_vm_protect((uintptr_t)slot->start, (size_t)slot->size,
> -                      HV_MEMORY_READ | HV_MEMORY_WRITE);
> +                      HV_MEMORY_READ | HV_MEMORY_WRITE | HV_MEMORY_EXEC);
>      }
>  }

Makes sense -- this matches the premissions we set initially
for memory regions in hvf_set_phys_mem().

Reviewed-by: Peter Maydell <peter.mayd...@linaro.org>

Should we change also the hv_vm_protect() call in
target/i386/hvf/hvf.c:ept_emulation_fault(), for consistency ?

thanks
-- PMM

Reply via email to