From c13766fc00baeded6f84581f6a4e976a6cdaaf09 Mon Sep 17 00:00:00 2001 From: David Karoly Date: Tue, 9 May 2023 21:40:04 +0200 Subject: [PATCH] kernel/arm: check for access flag fault in page fault handler Change-Id: Icc782a692e5dcd861958ffea934386b4d4e569c7 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6428 Reviewed-by: waddlesplash --- headers/private/system/arch/arm/arch_cpu_defs.h | 1 + src/system/kernel/arch/arm/arch_int.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/headers/private/system/arch/arm/arch_cpu_defs.h b/headers/private/system/arch/arm/arch_cpu_defs.h index 2ca5a8bc70..c7c6f17ece 100644 --- a/headers/private/system/arch/arm/arch_cpu_defs.h +++ b/headers/private/system/arch/arm/arch_cpu_defs.h @@ -28,6 +28,7 @@ #define FSR_LPAE 0x200 #define FSR_FS_ALIGNMENT_FAULT 0x01 +#define FSR_FS_ACCESS_FLAG_FAULT 0x06 #define FSR_FS_PERMISSION_FAULT_L1 0x0d #define FSR_FS_PERMISSION_FAULT_L2 0x0f diff --git a/src/system/kernel/arch/arm/arch_int.cpp b/src/system/kernel/arch/arm/arch_int.cpp index 206f21c02f..3d4cba603f 100644 --- a/src/system/kernel/arch/arm/arch_int.cpp +++ b/src/system/kernel/arch/arm/arch_int.cpp @@ -356,6 +356,8 @@ arch_arm_page_fault(struct iframe *frame, addr_t far, uint32 fsr, bool isWrite, far); } else if (!isExec && ((fsr & 0x060f) == FSR_FS_ALIGNMENT_FAULT)) { panic("unhandled alignment exception\n"); + } else if ((fsr & 0x060f) == FSR_FS_ACCESS_FLAG_FAULT) { + panic("unhandled access flag fault\n"); } else if ((frame->spsr & CPSR_I) != 0) { // interrupts disabled