On Thu, Aug 29, 2024 at 06:55:07PM +0100, Mark Brown wrote:
On Thu, Aug 22, 2024 at 04:10:59PM +0100, Joey Gouly wrote:
+static bool fault_from_pkey(unsigned long esr, struct vm_area_struct *vma,
unsigned int mm_flags)
+{
- unsigned long iss2 = ESR_ELx_ISS2(esr);
- if (!system_supports_poe())
return false;
- if (iss2 & ESR_ELx_Overlay)
return true;
Does this need an is_data_abort() && is_instruction_abort() check? Overlay doesn't appear to be defined for all exception types and it wasn't clear enough to me that the callers have done this check.
The only callers are in do_page_fault(), which should only be data or instruction aborts. I talked with Catalin and he said it's fine to not check again here.
I can add a permissions check though:
commit 033270f5a9462e998b4dee11fc91b43ac7929756 Author: Joey Gouly joey.gouly@arm.com Date: Tue Sep 3 15:45:59 2024 +0100
fixup! arm64: handle PKEY/POE faults
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index a68055150950..f651553a8ab8 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -495,6 +495,9 @@ static bool fault_from_pkey(unsigned long esr, struct vm_area_struct *vma, if (!system_supports_poe()) return false;
+ if (!esr_fsc_is_permission_fault(esr)) + return false; + if (iss2 & ESR_ELx_Overlay) return true;
Since the ESR_EL1 documentation says: If a memory access generates a Data Abort for a Permission fault, then this field holds information about the fault.
Thanks, Joey