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

Re: [Xen-devel] [PATCH] ignore guest writes to read only memory regions or memory holes in EPT



Also, shouldn't writes to memory holes be already caught by the
handle_mmio() case, as we identify memory holes as having type p2m_mmio_dm?

I would think something like:

 if ( (gla_validity == EPT_GLA_VALIDITY_MATCH) ||
      (gla_validity == EPT_GLA_VALIDITY_GPT_WALK) )
 {
    if ( p2m_is_mmio(t) || (t == p2m_ram_ro) )
    {
        /* MMIO and writes to read-only areas. */
        /* We can be quite generous in what we catch with this case. */
        if ( !handle_mmio() )
            vmx_inject_exception(TRAP_gp_fault, 0);
    }
    else if ( p2m_is_ram(t) && paging_mode_log_dirty(d) )
    {
        /* Faster non-emulation handling for log-dirty and PoD. */
        paging_mark_dirty(), ...
    }    
    return;
 }

...would be a suitably wide-ranging catch-all, without catching genuine EPT
implementation bugs that you want to print an error message for. It's also
less complicated than the existing ept_handle_violation() implementation, so
I would like to switch to it.

 -- Keir

On 26/10/2009 08:27, "Jan Beulich" <JBeulich@xxxxxxxxxx> wrote:

> After looking at the documentation I don't think using
> __get_instruction_length() here is valid, i.e. you need to decode the
> instruction in order to be able to skip it. Otherwise, could you have
> your doc folks update the documentation (24.2.4) accordingly?
> 
> Jan
> 
>>>> "Li, Xin" <xin.li@xxxxxxxxx> 23.10.09 09:26 >>>
> ignore guest writes to read only memory regions or memory holes in EPT.
> 
> This patch prevents domain crash when running memtest86 with EPT.
> 
> Signed-off-by: Xin Li <xin.li@xxxxxxxxx>
> 
> diff -r 37829fd7c1e3 xen/arch/x86/hvm/vmx/vmx.c
> --- a/xen/arch/x86/hvm/vmx/vmx.c        Wed Oct 21 16:08:28 2009 +0100
> +++ b/xen/arch/x86/hvm/vmx/vmx.c        Fri Oct 23 23:21:27 2009 +0800
> @@ -2184,6 +2184,17 @@
>          return;
>      }
> 
> +    /* Ignore writes to:
> +     *     1. read only memory regions;
> +     *     2. memory holes. */
> +    if ( (qualification & EPT_WRITE_VIOLATION)
> +         && (((gla_validity == EPT_GLA_VALIDITY_MATCH) && (t == p2m_ram_ro))
> +             || (mfn_x(mfn) == INVALID_MFN)) ) {
> +        int inst_len = __get_instruction_length();
> +        __update_guest_eip(inst_len);
> +        return;
> +    }
> +
>      /* Everything else is an error. */
>      gla = __vmread(GUEST_LINEAR_ADDRESS);
>      gdprintk(XENLOG_ERR, "EPT violation %#lx (%c%c%c/%c%c%c), "
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.