Necrosoft
2007-Nov-09 23:09 UTC
[Xen-devel] Question about xc_ptrace and PV domU process memory map.
Hi I would use a xc_ptrace function to map a domU page having a guest virtual address. I use a PV domain, non HVM. If I simply call xp_ptrace(xc_handle, PTRACE_PEEKTEXT, 0, virt_address, 0) (where xc_handle is obtained by xc_handle = xc_interface_open() and first 0 is vcpu used) I receive this message: "Could not allocate memory" Reading the code I look that this error is caused by map_domain_va function (line 365 in xc_ptrace.c XEN 3.1). In this section of code is calculated total pages via: long npgs = xc_get_tot_pages(xc_handle, current_domid); I think that the error reported above is caused by a wrong value returned by xc_get_tot_pages function. In particular I think it is current_domid set incorrectly. In effect current_domid is statically declared but I do not understand when and where is initialized. So, the problem is pass the correct current_domid (in what way?) or I mistake something? You can help me? TNX in advance! Best regards _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2007-Nov-12 15:59 UTC
Re: [Xen-devel] Question about xc_ptrace and PV domU process memory map.
Necrosoft writes ("[Xen-devel] Question about xc_ptrace and PV domU process memory map."):> If I simply call xp_ptrace(xc_handle, PTRACE_PEEKTEXT, 0, virt_address, > 0) (where xc_handle is obtained by xc_handle = xc_interface_open() and > first 0 is vcpu used) I receive this message:You mean xc_ptrace ? I think these functions are designed only to be used following PTRACE_ATTACH. PTRACE_ATTACH will pause the target domain, which may not be what you want. http://xenaccess.sourceforge.net/ may be more what you want. (I have no knowledge of whether XenAccess is any good - I just saw the link from wiki.xensource.com.) If you want to use libxc you will have to put up with pausing the domain, or do some work on the races which result from allowing it to run: by my reading of the code it''s not correct to arrange to skip the pause, or unpause the domain after PTRACE_ATTACH, because xc_ptrace.c:map_domain_va assumes that the domain does not allocate additional pages between its calls to xc_get_tot_pages and xc_get_pfn_list. Arguably it would be better if xc_ptrace.c asserted that current_domid was valid. (The purpose of the test `current_domid > 0 ?'' in the call to xc_domain_unpause PTRACE_DETACH seems to be to work around some bug in a caller but it seems unlikely to DTRT except under very specific circumstances.)> long npgs = xc_get_tot_pages(xc_handle, current_domid);...> I think that the error reported above is caused by a wrong value > returned by xc_get_tot_pages function. In particular I think it is > current_domid set incorrectly.You don''t say whether you used a debugger to check the value of current_domid. I guess from your message that you didn''t, and evidently you didn''t spot that current_domid is assigned in PTRACE_ATTACH. That''s where it is supposed to be initialised. I guess that you probably aren''t calling _ATTACH. As a result current_domid will be -1 (probably) and this will cause domctl getdomaininfo to fail. map_domain_va fails to check for this error case and carries blithely on, passing (-1 * sizeof(...)) to malloc. Ian. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Necrosoft
2007-Nov-13 13:49 UTC
[Xen-devel] Re: Question about xc_ptrace and PV domU process memory map.
>You mean xc_ptrace ? I think these functions are designed only to be >used following PTRACE_ATTACH. PTRACE_ATTACH will pause the target >domain, which may not be what you want. >yes xc_ptrace. Can be ok pause the domU.> >http://xenaccess.sourceforge.net/ may be more what you want. (I have >no knowledge of whether XenAccess is any good - I just saw the link >from wiki.xensource.com.) >I look this...the portions of code about mapping virt. address seem quite similar...> >If you want to use libxc you will have to put up with pausing the >domain, or do some work on the races which result from allowing it to >run: by my reading of the code it''s not correct to arrange to skip the >pause, or unpause the domain after PTRACE_ATTACH, because >xc_ptrace.c:map_domain_va assumes that the domain does not allocate >additional pages between its calls to xc_get_tot_pages and >xc_get_pfn_list. >So yes, in this week I look better the code and in effect fails for incorrect current_domid. Now I did another test: 1. Run in domU a test program, I take a virtual address (for example in hex format). This program enter in active waiting and so I pause the domain. cr3, now, is relative to PGD for this program. 2. Now I call map_dom_va passing the virtual address described above. This function call map_dom_va_32 but this fails at l2e entry retrieve. In particular is verified the guard: if( !(l2e & _PAGE_PRESENT) ) { return NULL; } So l2e is 0, while l2 is a valid address mapped with xc_map_foreign_range. Can you suggest some ideas concerning this type of failure? Thanks Best Regards _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel