From: Ram Pai Date: Fri, 4 May 2018 20:01:51 +0000 (-0700) Subject: powerpc/pkeys: Detach execute_only key on !PROT_EXEC X-Git-Tag: v4.19~866^2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=eabdb8ca8690eedd461e61ea7780595fbbae8132;p=platform%2Fkernel%2Flinux-rpi.git powerpc/pkeys: Detach execute_only key on !PROT_EXEC Disassociate the exec_key from a VMA if the VMA permission is not PROT_EXEC anymore. Otherwise the exec_only key continues to be associated with the vma, causing unexpected behavior. The problem was reported on x86 by Shakeel Butt, which is also applicable on powerpc. Fixes: 5586cf61e108 ("powerpc: introduce execute-only pkey") Cc: stable@vger.kernel.org # v4.16+ Reported-by: Shakeel Butt Signed-off-by: Ram Pai Reviewed-by: Thiago Jung Bauermann Signed-off-by: Michael Ellerman --- diff --git a/arch/powerpc/mm/pkeys.c b/arch/powerpc/mm/pkeys.c index 0eafdf01..e6f500f 100644 --- a/arch/powerpc/mm/pkeys.c +++ b/arch/powerpc/mm/pkeys.c @@ -383,9 +383,9 @@ int __arch_override_mprotect_pkey(struct vm_area_struct *vma, int prot, { /* * If the currently associated pkey is execute-only, but the requested - * protection requires read or write, move it back to the default pkey. + * protection is not execute-only, move it back to the default pkey. */ - if (vma_is_pkey_exec_only(vma) && (prot & (PROT_READ | PROT_WRITE))) + if (vma_is_pkey_exec_only(vma) && (prot != PROT_EXEC)) return 0; /*