lkml.org 
[lkml]   [2014]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 18/18] s390: fix kernel crash due to linkage stack instructions
    3.2.57-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Martin Schwidefsky <schwidefsky@de.ibm.com>

    commit 8d7f6690cedb83456edd41c9bd583783f0703bf0 upstream.

    The kernel currently crashes with a low-address-protection exception
    if a user space process executes an instruction that tries to use the
    linkage stack. Set the base-ASTE origin and the subspace-ASTE origin
    of the dispatchable-unit-control-table to point to a dummy ASTE.
    Set up control register 15 to point to an empty linkage stack with no
    room left.

    A user space process with a linkage stack instruction will still crash
    but with a different exception which is correctly translated to a
    segmentation fault instead of a kernel oops.

    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/s390/kernel/head64.S | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/arch/s390/kernel/head64.S
    +++ b/arch/s390/kernel/head64.S
    @@ -61,7 +61,7 @@ ENTRY(startup_continue)
    .quad 0 # cr12: tracing off
    .quad 0 # cr13: home space segment table
    .quad 0xc0000000 # cr14: machine check handling off
    - .quad 0 # cr15: linkage stack operations
    + .quad .Llinkage_stack # cr15: linkage stack operations
    .Lpcmsk:.quad 0x0000000180000000
    .L4malign:.quad 0xffffffffffc00000
    .Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8
    @@ -69,12 +69,15 @@ ENTRY(startup_continue)
    .Lparmaddr:
    .quad PARMAREA
    .align 64
    -.Lduct: .long 0,0,0,0,.Lduald,0,0,0
    +.Lduct: .long 0,.Laste,.Laste,0,.Lduald,0,0,0
    .long 0,0,0,0,0,0,0,0
    +.Laste: .quad 0,0xffffffffffffffff,0,0,0,0,0,0
    .align 128
    .Lduald:.rept 8
    .long 0x80000000,0,0,0 # invalid access-list entries
    .endr
    +.Llinkage_stack:
    + .long 0,0,0x89000000,0,0,0,0x8a000000,0

    ENTRY(_ehead)



    \
     
     \ /
      Last update: 2014-04-07 03:01    [W:2.385 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site