On 15/10/18 15:52, Alexandru Stefan ISAILA wrote:
> This patch adds a couple of regs to the vm_event that are used by
> the introspection. The base, limit and ar
> bits are compressed into a uint64_t union so as not to enlarge the
> vm_event.
>
> Signed-off-by: Alexandru Isaila <[email protected]>
> ---
>  xen/arch/x86/vm_event.c       | 35 ++++++++++++++++++++++++++++++++---
>  xen/include/public/vm_event.h | 29 +++++++++++++++++++++++++----
>  2 files changed, 57 insertions(+), 7 deletions(-)
>
> diff --git a/xen/arch/x86/vm_event.c b/xen/arch/x86/vm_event.c
> index 15de43c3e6..288da0087f 100644
> --- a/xen/arch/x86/vm_event.c
> +++ b/xen/arch/x86/vm_event.c
> @@ -171,13 +171,42 @@ void vm_event_fill_regs(vm_event_request_t *req)
>      req->data.regs.x86.msr_lstar = ctxt.msr_lstar;
>  
>      hvm_get_segment_register(curr, x86_seg_fs, &seg);
> -    req->data.regs.x86.fs_base = seg.base;
> +    req->data.regs.x86.fs.fields.base = seg.base;
> +    req->data.regs.x86.fs.fields.limit = seg.limit;
> +    req->data.regs.x86.fs.fields.ar = seg.attr;
> +    req->data.regs.x86.fs_sel = seg.sel;

This isn't correct for the limit.  The packing logic needs to look
something like:

if ( seg.attr.g )
    req->data.regs.x86.fs.fields.limit = seg.limit >> 12;
else
    req->data.regs.x86.fs.fields.limit = seg.limit;

Otherwise you truncate the result in the default case.

Furthermore, I'd recommend creating a helper function for packing.

~Andrew

_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to