summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2019-10-14 18:51:28 +0200
committerMichael Ellerman <mpe@ellerman.id.au>2019-10-16 23:57:43 +0200
commitd10f60ae27d26d811e2a1bb39ded47df96d7499f (patch)
tree04055f423810aea371f77a733419234e78f070f5 /arch
parentspufs: fix a crash in spufs_create_root() (diff)
downloadlinux-d10f60ae27d26d811e2a1bb39ded47df96d7499f.tar.xz
linux-d10f60ae27d26d811e2a1bb39ded47df96d7499f.zip
powerpc/32s: fix allow/prevent_user_access() when crossing segment boundaries.
Make sure starting addr is aligned to segment boundary so that when incrementing the segment, the starting address of the new segment is below the end address. Otherwise the last segment might get missed. Fixes: a68c31fc01ef ("powerpc/32s: Implement Kernel Userspace Access Protection") Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/067a1b09f15f421d40797c2d04c22d4049a1cee8.1571071875.git.christophe.leroy@c-s.fr
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/include/asm/book3s/32/kup.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/book3s/32/kup.h b/arch/powerpc/include/asm/book3s/32/kup.h
index 677e9babef80..f9dc597b0b86 100644
--- a/arch/powerpc/include/asm/book3s/32/kup.h
+++ b/arch/powerpc/include/asm/book3s/32/kup.h
@@ -91,6 +91,7 @@
static inline void kuap_update_sr(u32 sr, u32 addr, u32 end)
{
+ addr &= 0xf0000000; /* align addr to start of segment */
barrier(); /* make sure thread.kuap is updated before playing with SRs */
while (addr < end) {
mtsrin(sr, addr);