• Roland McGrath's avatar
    x86 vDSO: don't use disabled vDSO for signal trampoline · 1a3e4ca4
    Roland McGrath authored
    If the vDSO was not mapped, don't use it as the "restorer" for a signal
    handler.  Whether we have a pointer in mm->context.vdso depends on what
    happened at exec time, so we shouldn't check any global flags now.
    
    Background:
    
    Currently, every 32-bit exec gets the vDSO mapped even if it's disabled
    (the process just doesn't get told about it).  Because it's in fact
    always there, the bug that this patch fixes cannot happen now.  With
    the second patch, it won't be mapped at all when it's disabled, which is
    one of the things that people might really want when they disable it (so
    nothing they didn't ask for goes into their address space).
    
    The 32-bit signal handler setup when SA_RESTORER is not used refers to
    current->mm->context.vdso without regard to whether the vDSO has been
    disabled when the process was exec'd.  This patch fixes this not to use
    it when it's null, which becomes possible after the second patch. (This
    never happens in normal use, because glibc's sigaction call uses
    SA_RESTORER unless glibc detected the vDSO.)
    Signed-off-by: default avatarRoland McGrath <roland@redhat.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    1a3e4ca4
signal_32.c 17.6 KB