• Serge E. Hallyn's avatar
    user namespace: make signal.c respect user namespaces · 6b550f94
    Serge E. Hallyn authored
    ipc/mqueue.c: for __SI_MESQ, convert the uid being sent to recipient's
    user namespace. (new, thanks Oleg)
    
    __send_signal: convert current's uid to the recipient's user namespace
    for any siginfo which is not SI_FROMKERNEL (patch from Oleg, thanks
    again :)
    
    do_notify_parent and do_notify_parent_cldstop: map task's uid to parent's
    user namespace
    
    ptrace_signal maps parent's uid into current's user namespace before
    including in signal to current.  IIUC Oleg has argued that this shouldn't
    matter as the debugger will play with it, but it seems like not converting
    the value currently being set is misleading.
    
    Changelog:
    Sep 20: Inspired by Oleg's suggestion, define map_cred_ns() helper to
    	simplify callers and help make clear what we are translating
            (which uid into which namespace).  Passing the target task would
    	make callers even easier to read, but we pass in user_ns because
    	current_user_ns() != task_cred_xxx(current, user_ns).
    Sep 20: As recommended by Oleg, also put task_pid_vnr() under rcu_read_lock
    	in ptrace_signal().
    Sep 23: In send_signal(), detect when (user) signal is coming from an
    	ancestor or unrelated user namespace.  Pass that on to __send_signal,
    	which sets si_uid to 0 or overflowuid if needed.
    Oct 12: Base on Oleg's fixup_uid() patch.  On top of that, handle all
    	SI_FROMKERNEL cases at callers, because we can't assume sender is
    	current in those cases.
    Nov 10: (mhelsley) rename fixup_uid to more meaningful usern_fixup_signal_uid
    Nov 10: (akpm) make the !CONFIG_USER_NS case clearer
    Signed-off-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Matt Helsley <matthltc@us.ibm.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    From: Serge Hallyn <serge.hallyn@canonical.com>
    Subject: __send_signal: pass q->info, not info, to userns_fixup_signal_uid (v2)
    
    Eric Biederman pointed out that passing info is a bug and could lead to a
    NULL pointer deref to boot.
    
    A collection of signal, securebits, filecaps, cap_bounds, and a few other
    ltp tests passed with this kernel.
    
    Changelog:
        Nov 18: previous patch missed a leading '&'
    Signed-off-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    From: Dan Carpenter <dan.carpenter@oracle.com>
    Subject: ipc/mqueue: lock() => unlock() typo
    
    There was a double lock typo introduced in b085f4bd6b21 "user namespace:
    make signal.c respect user namespaces"
    Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Matt Helsley <matthltc@us.ibm.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Acked-by: default avatarSerge Hallyn <serge@hallyn.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6b550f94
signal.c 84.6 KB