• Andy Lutomirski's avatar
    x86/signal/64: Fix SS if needed when delivering a 64-bit signal · 8ff5bd2e
    Andy Lutomirski authored
    Signals are always delivered to 64-bit tasks with CS set to a long
    mode segment.  In long mode, SS doesn't matter as long as it's a
    present writable segment.
    
    If SS starts out invalid (this can happen if the signal was caused
    by an IRET fault or was delivered on the way out of set_thread_area
    or modify_ldt), then IRET to the signal handler can fail, eventually
    killing the task.
    
    The straightforward fix would be to simply reset SS when delivering
    a signal.  That breaks DOSEMU, though: 64-bit builds of DOSEMU rely
    on SS being set to the faulting SS when signals are delivered.
    
    As a compromise, this patch leaves SS alone so long as it's valid.
    
    The net effect should be that the behavior of successfully delivered
    signals is unchanged.  Some signals that would previously have
    failed to be delivered will now be delivered successfully.
    
    This has no effect for x32 or 32-bit tasks: their signal handlers
    were already called with SS == __USER_DS.
    
    (On Xen, there's a slight hole: if a task sets SS to a writable
     *kernel* data segment, then we will fail to identify it as invalid
     and we'll still kill the task.  If anyone cares, this could be fixed
     with a new paravirt hook.)
    Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
    Acked-by: default avatarBorislav Petkov <bp@alien8.de>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Cyrill Gorcunov <gorcunov@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Pavel Emelyanov <xemul@parallels.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stas Sergeev <stsp@list.ru>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/163c6e1eacde41388f3ff4d2fe6769be651d7b6e.1455664054.git.luto@kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    8ff5bd2e
desc_defs.h 3.45 KB