On 04/04/17 16:39, Tamas K Lengyel wrote: > > > On Tue, Apr 4, 2017 at 9:11 AM, Andrew Cooper > <andrew.coop...@citrix.com <mailto:andrew.coop...@citrix.com>> wrote: > > On 04/04/17 13:14, Razvan Cojocaru wrote: > > Currently xc_translate_foreign_address only checks for PSE bit > only on > > level 2 entries (that's 2 MB pages on x64 and 32-bit with PAE, > and 4 MB > > pages on 32-bit). But linux kernel sometimes uses 1 GB pages. > This patch > > fixes that, and checks the PSE bit on level 3 entries if the > guest has 4 > > translation levels (that means 64-bit guests only). > > > > Signed-off-by: Cristian-Bogdan Sirb <cs...@bitdefender.com > <mailto:cs...@bitdefender.com>> > > This function is in a rather tragic state. Lucky it isn't used by > code > covered by Xen's security statement. > > This patch reintroduces XSA-176, and the existing code doesn't > work for > 4M superpages, or guests using PSE36. (I might be acutely aware of > pagetable issues, following c/s > 4c5d78a10dc89). Furthermore, the map/unmap overhead must be a large > overhead. > > > Indeed it is, that's why in LibVMI there is actually a cache > implemented for mapped pages so we throw them away only after they > have been idle for a while. > > > > How often is this used by introspection? To properly walk the > pagetables, you need access to the CPUID information (as well as the > control register state), and that isn't yet available to the toolstack > in Xen. > > > Control register state is certainly available. > > > > I'm wondering whether it might be better to have a way of asking > Xen to > perform a virtual to linear translation in the context of a specific > vcpu. My gut feeling is that it might be quicker than running this > logic, and is definitely more simple than trying to fix this code > not to > have vulnerabilities in it. > > > I don't think it would be necessary. IMHO doing this in Xen wouldn't > really net us much performance-wise. Furthermore, there are certain > PTE bits that are OS specific and Xen wouldn't necessary have the > required information to do the translation properly (ie. present bit > unset but transition bits used for Windows guests).
Ok. Xen needs to care only about the behaviour of real pointers in guest context, and whether they raise #PF. It sounds like the best thing to do is to provide userspace with all information it needs to actually perform the walk safely, and let the library apply guest-specific knowledge if it wants. Off the top of my head, the control information needed is: Hap/Shadow, hardwares views towards page1gb and pse36, whether EFER.NX is leaked from Xen, EFER.NX, CR0.{PG,WP}, CR4.{PAE,PSE,PCID,SMEP,SMAP,PKE}, and the PDPTRs for the 32bit PAE case, because the translation in use isn't necessary the value you would read by following CR3 in memory. ~Andrew
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel