[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] xenoprof: Handle 32-bit guest stacks properly in a 64-bit hypervisor
On 23/01/12 09:50, Jan Beulich wrote: If you're adding a compat mode guest case here, then you should also use compat mode accessors (compat_handle_okay(), __copy_from_compat_offset()), implying that you also have a local handle variable of the appropriate type (and perhaps moving the native one down into the 'else' body). I'm trying to understand the compat handle. It is not clear to me how to map one from head (a 64-bit pointer), since COMPAT_HANDLE seems to store a 32-bit compat_ptr_t value in its structure. Ideally, what I would like to do is COMPAT_HANDLE(char) guest_head = map_guest_handle_to_compat_handle (guest_handle_from_ptr(head, char)); or COMPAT_HANDLE(char) guest_head = compat_handle_from_ptr(head, char)); but I can't find any equivalent functions in any header. The following line compiles, COMPAT_HANDLE(char) guest_head = { (full_ptr_t)head };but it looks like, in this case, the compat handle structure in compat.h will truncate the most significant bits from the head pointer, so compat_handle_okay(guest_head,...) and __copy_from_compat(...,guest_head,...) below will be using a truncated pointer: 56 static struct frame_head * 57 dump_guest_backtrace(struct domain *d, struct vcpu *vcpu, 58 struct frame_head * head, int mode) 59 { 60 struct frame_head bufhead[2]; 61 62 #ifdef CONFIG_X86_64 63 if ( is_32bit_vcpu(vcpu) ) 64 { 65 COMPAT_HANDLE(char) guest_head = { (full_ptr_t)head }; 66 struct frame_head_32bit bufhead32[2];67 /* Also check accessibility of one struct frame_head beyond */ 68 if (!compat_handle_okay(guest_head, sizeof(bufhead32))) 69 return 0; 70 if (__copy_from_compat((char *)bufhead32, guest_head, 71 sizeof(bufhead32))) 72 return 0;73 bufhead[0].ebp=(struct frame_head *)(full_ptr_t)bufhead32[0].ebp; 74 bufhead[0].ret=bufhead32[0].ret; 75 } 76 else 77 #endifAny advice? Maybe the best option in this case is to avoid the compat* functions and to use the original guest* functions instead. Thanks, Marcus _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |