From 58cef789de872e34e02cdcfcecf3051c569f87a8 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Mon, 30 Sep 2024 08:04:46 +0000 Subject: [PATCH] arm64: Fix handling of UXN bit in VMSAv8TranslationMap::Query * A clear UXN bit only implies B_EXECUTE_AREA if the page was also user-readable. Change-Id: I01203b6539cc60550a5825c663af5d8cfe57f751 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8423 Haiku-Format: Haiku-format Bot Reviewed-by: waddlesplash --- src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp b/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp index 2a29703a13..1e9ef0b147 100644 --- a/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp +++ b/src/system/kernel/arch/arm64/VMSAv8TranslationMap.cpp @@ -865,13 +865,14 @@ VMSAv8TranslationMap::Query(addr_t va, phys_addr_t* pa, uint32* flags) if (is_pte_dirty(pte)) *flags |= PAGE_MODIFIED; - if ((pte & kAttrUXN) == 0) - *flags |= B_EXECUTE_AREA; if ((pte & kAttrPXN) == 0) *flags |= B_KERNEL_EXECUTE_AREA; - if ((pte & kAttrAPUserAccess) != 0) + if ((pte & kAttrAPUserAccess) != 0) { *flags |= B_READ_AREA; + if ((pte & kAttrUXN) == 0) + *flags |= B_EXECUTE_AREA; + } if ((pte & kAttrSWDBM) != 0) { *flags |= B_KERNEL_WRITE_AREA;