lkml.org 
[lkml]   [2014]   [Feb]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.11 117/121] s390: fix kernel crash due to linkage stack instructions
    Date
    3.11.10.5 -stable 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: Luis Henriques <luis.henriques@canonical.com>
    ---
    arch/s390/kernel/head64.S | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/arch/s390/kernel/head64.S b/arch/s390/kernel/head64.S
    index b9e25ae..d7c0050 100644
    --- a/arch/s390/kernel/head64.S
    +++ b/arch/s390/kernel/head64.S
    @@ -59,7 +59,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
    @@ -67,12 +67,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)

    --
    1.9.0


    \
     
     \ /
      Last update: 2014-02-21 14:41    [W:4.069 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site