lkml.org 
[lkml]   [2020]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 162/214] powerpc/powermac: Fix low_sleep_handler with KUAP and KUEP
    Date
    From: Christophe Leroy <christophe.leroy@csgroup.eu>

    commit 2c637d2df4ee4830e9d3eb2bd5412250522ce96e upstream.

    low_sleep_handler() has an hardcoded restore of segment registers
    that doesn't take KUAP and KUEP into account.

    Use head_32's load_segment_registers() routine instead.

    Fixes: a68c31fc01ef ("powerpc/32s: Implement Kernel Userspace Access Protection")
    Fixes: 31ed2b13c48d ("powerpc/32s: Implement Kernel Userspace Execution Prevention.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/21b05f7298c1b18f73e6e5b4cd5005aafa24b6da.1599820109.git.christophe.leroy@csgroup.eu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kernel/head_32.S | 2 +-
    arch/powerpc/platforms/powermac/sleep.S | 9 +--------
    2 files changed, 2 insertions(+), 9 deletions(-)

    --- a/arch/powerpc/kernel/head_32.S
    +++ b/arch/powerpc/kernel/head_32.S
    @@ -843,7 +843,7 @@ BEGIN_MMU_FTR_SECTION
    END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
    blr

    -load_segment_registers:
    +_GLOBAL(load_segment_registers)
    li r0, NUM_USER_SEGMENTS /* load up user segment register values */
    mtctr r0 /* for context 0 */
    li r3, 0 /* Kp = 0, Ks = 0, VSID = 0 */
    --- a/arch/powerpc/platforms/powermac/sleep.S
    +++ b/arch/powerpc/platforms/powermac/sleep.S
    @@ -293,14 +293,7 @@ grackle_wake_up:
    * we do any r1 memory access as we are not sure they
    * are in a sane state above the first 256Mb region
    */
    - li r0,16 /* load up segment register values */
    - mtctr r0 /* for context 0 */
    - lis r3,0x2000 /* Ku = 1, VSID = 0 */
    - li r4,0
    -3: mtsrin r3,r4
    - addi r3,r3,0x111 /* increment VSID */
    - addis r4,r4,0x1000 /* address of next segment */
    - bdnz 3b
    + bl load_segment_registers
    sync
    isync


    \
     
     \ /
      Last update: 2020-11-03 22:28    [W:2.413 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site