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

Re: [Xen-devel] [PATCH v2] x86/vm_event: add gdtr_base to the vm_event structure



On Thu, May 2, 2019 at 3:42 PM Tamas K Lengyel <tamas@xxxxxxxxxxxxx> wrote:
>
> Receiving this register is useful for introspecting 32-bit Windows when the
> event being trapped happened while in ring3.
>
> Signed-off-by: Tamas K Lengyel <tamas@xxxxxxxxxxxxx>
> Cc: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx>
> Cc: Tamas K Lengyel <tamas@xxxxxxxxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>
> ---
> v2: add gdtr limit
> ---
>  xen/arch/x86/vm_event.c       | 6 ++++++
>  xen/include/public/vm_event.h | 6 ++++--
>  2 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/xen/arch/x86/vm_event.c b/xen/arch/x86/vm_event.c
> index 51c3493b1d..52c2a71fa0 100644
> --- a/xen/arch/x86/vm_event.c
> +++ b/xen/arch/x86/vm_event.c
> @@ -179,6 +179,11 @@ static void vm_event_pack_segment_register(enum 
> x86_segment segment,
>          reg->es_sel = seg.sel;
>          break;
>
> +    case x86_seg_gdtr:
> +        reg->gdtr_base = seg.base;
> +        reg->gdtr_limit = seg.limit;
> +        break;
> +
>      default:
>          ASSERT_UNREACHABLE();
>      }
> @@ -238,6 +243,7 @@ void vm_event_fill_regs(vm_event_request_t *req)
>      vm_event_pack_segment_register(x86_seg_ss, &req->data.regs.x86);
>      vm_event_pack_segment_register(x86_seg_ds, &req->data.regs.x86);
>      vm_event_pack_segment_register(x86_seg_es, &req->data.regs.x86);
> +    vm_event_pack_segment_register(x86_seg_gdtr, &req->data.regs.x86);
>
>      req->data.regs.x86.shadow_gs = ctxt.shadow_gs;
>      req->data.regs.x86.dr6 = ctxt.dr6;
> diff --git a/xen/include/public/vm_event.h b/xen/include/public/vm_event.h
> index b2bafc0d77..959083d8c4 100644
> --- a/xen/include/public/vm_event.h
> +++ b/xen/include/public/vm_event.h
> @@ -29,7 +29,7 @@
>
>  #include "xen.h"
>
> -#define VM_EVENT_INTERFACE_VERSION 0x00000004
> +#define VM_EVENT_INTERFACE_VERSION 0x00000005
>
>  #if defined(__XEN__) || defined(__XEN_TOOLS__)
>
> @@ -198,6 +198,7 @@ struct vm_event_regs_x86 {
>      uint64_t msr_efer;
>      uint64_t msr_star;
>      uint64_t msr_lstar;
> +    uint64_t gdtr_base;
>      uint32_t cs_base;
>      uint32_t ss_base;
>      uint32_t ds_base;
> @@ -211,13 +212,14 @@ struct vm_event_regs_x86 {
>      struct vm_event_x86_selector_reg fs;
>      struct vm_event_x86_selector_reg gs;
>      uint64_t shadow_gs;
> +    uint16_t gdtr_limit;

Whoops, just noticed that limit actually needs 20-bits. I'll just grow
this to 32 and drop the pad at the end.

>      uint16_t cs_sel;
>      uint16_t ss_sel;
>      uint16_t ds_sel;
>      uint16_t es_sel;
>      uint16_t fs_sel;
>      uint16_t gs_sel;
> -    uint32_t _pad;
> +    uint16_t _pad;
>  };

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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