[PATCH v5 16/30] arm64: handle PKEY/POE faults
Joey Gouly
joey.gouly at arm.com
Wed Sep 4 01:29:37 AEST 2024
On Tue, Sep 03, 2024 at 03:50:46PM +0100, Joey Gouly wrote:
> 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 at 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.
>
Sorry, I was a bit too eager with that patch. The previous patch was bailing
out before the vma-backed checks could take place.
It should be:
commit 7b67b149f2f492e907b27521c95639f4ea208221 (HEAD -> permission_overlay_v6)
Author: Joey Gouly <joey.gouly at 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..8b281cf308b3 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -495,7 +495,7 @@ static bool fault_from_pkey(unsigned long esr, struct vm_area_struct *vma,
if (!system_supports_poe())
return false;
- if (iss2 & ESR_ELx_Overlay)
+ if (esr_fsc_is_permission_fault(esr) && (iss2 & ESR_ELx_Overlay))
return true;
return !arch_vma_access_permitted(vma,
More information about the Linuxppc-dev
mailing list