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
