[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v8 00/13] arm/mem_access: Walk guest page tables in SW if mem_access is active
Hi all, The function p2m_mem_access_check_and_get_page is called from the function get_page_from_gva if mem_access is active and the hardware-aided translation of the given guest virtual address (gva) into machine address fails. That is, if the stage-2 translation tables constrain access to the guests's page tables, hardware-assisted translation will fail. The idea of the function p2m_mem_access_check_and_get_page is thus to translate the given gva and check the requested access rights in software. However, as the current implementation of p2m_mem_access_check_and_get_page makes use of the hardware-aided gva to ipa translation, the translation might also fail because of reasons stated above and will become equally relevant for the altp2m implementation on ARM. As such, we provide a software guest translation table walk to address the above mentioned issue. The current version of the implementation supports translation of both the short-descriptor as well as the long-descriptor translation table format on ARMv7 and ARMv8 (AArch32/AArch64). This revised version incorporates the comments of the previous patch series. These comprise a comment explicitly stating the fact and position where we recursively rely on the p2m->lock. We also add casts to fields of the struct short_desc_t in guest_walk_sd as to cope with incorrect values due to the C type promotion. The following patch series can be found on Github[0]. Cheers, ~Sergej [0] https://github.com/sergej-proskurin/xen (branch arm-gpt-walk-v8) Sergej Proskurin (13): arm/mem_access: Add and cleanup (TCR_|TTBCR_)* defines arm/mem_access: Add defines supporting PTs with varying page sizes arm/lpae: Introduce lpae_is_page helper arm/mem_access: Add short-descriptor pte typedefs and macros arm/mem_access: Introduce GV2M_EXEC permission arm/mem_access: Introduce BIT_ULL bit operation arm/mem_access: Introduce GENMASK_ULL bit operation arm/guest_access: Move vgic_access_guest_memory to guest_access.h arm/guest_access: Rename vgic_access_guest_memory arm/mem_access: Add software guest-page-table walk arm/mem_access: Add long-descriptor based gpt arm/mem_access: Add short-descriptor based gpt arm/mem_access: Walk the guest's pt in software xen/arch/arm/Makefile | 1 + xen/arch/arm/guest_walk.c | 636 +++++++++++++++++++++++++++++++++++++ xen/arch/arm/guestcopy.c | 50 +++ xen/arch/arm/mem_access.c | 31 +- xen/arch/arm/vgic-v3-its.c | 37 +-- xen/arch/arm/vgic.c | 49 --- xen/include/asm-arm/bitops.h | 1 + xen/include/asm-arm/config.h | 2 + xen/include/asm-arm/guest_access.h | 3 + xen/include/asm-arm/guest_walk.h | 19 ++ xen/include/asm-arm/lpae.h | 66 ++++ xen/include/asm-arm/p2m.h | 8 +- xen/include/asm-arm/page.h | 1 + xen/include/asm-arm/processor.h | 69 +++- xen/include/asm-arm/short-desc.h | 130 ++++++++ xen/include/asm-arm/vgic.h | 3 - xen/include/asm-x86/config.h | 2 + xen/include/xen/bitops.h | 3 + 18 files changed, 1035 insertions(+), 76 deletions(-) create mode 100644 xen/arch/arm/guest_walk.c create mode 100644 xen/include/asm-arm/guest_walk.h create mode 100644 xen/include/asm-arm/short-desc.h -- 2.13.3 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |