• Richard Weinberger's avatar
    kernel/signal.c: unexport sigsuspend() · 9d8a7652
    Richard Weinberger authored
    sigsuspend() is nowhere used except in signal.c itself, so we can mark it
    static do not pollute the global namespace.
    
    But this patch is more than a boring cleanup patch, it fixes a real issue
    on UserModeLinux.  UML has a special console driver to display ttys using
    xterm, or other terminal emulators, on the host side.  Vegard reported
    that sometimes UML is unable to spawn a xterm and he's facing the
    following warning:
    
      WARNING: CPU: 0 PID: 908 at include/linux/thread_info.h:128 sigsuspend+0xab/0xc0()
    
    It turned out that this warning makes absolutely no sense as the UML
    xterm code calls sigsuspend() on the host side, at least it tries.  But
    as the kernel itself offers a sigsuspend() symbol the linker choose this
    one instead of the glibc wrapper.  Interestingly this code used to work
    since ever but always blocked signals on the wrong side.  Some recent
    kernel change made the WARN_ON() trigger and uncovered the bug.
    
    It is a wonderful example of how much works by chance on computers. :-)
    
    Fixes: 68f3f16d ("new helper: sigsuspend()")
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    Reported-by: default avatarVegard Nossum <vegard.nossum@oracle.com>
    Tested-by: default avatarVegard Nossum <vegard.nossum@oracle.com>
    Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
    Cc: <stable@vger.kernel.org>	[3.5+]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9d8a7652
signal.c 93.9 KB