From: ebiederm@xmission.com (Eric W. Biederman)
To: "Serge E. Hallyn" <serge@hallyn.com>
Cc: LSM <linux-security-module@vger.kernel.org>,
James Morris <jmorris@namei.org>,
Kees Cook <kees.cook@canonical.com>,
containers@lists.linux-foundation.org,
kernel list <linux-kernel@vger.kernel.org>,
Alexey Dobriyan <adobriyan@gmail.com>,
Michael Kerrisk <mtk.manpages@gmail.com>
Subject: Re: [RFC 4/5] user namespaces: allow killing tasks in your own or child userns
Date: Sat, 01 Jan 2011 15:10:19 -0800 [thread overview]
Message-ID: <m1zkrkuso4.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <20110101044522.GA26476@mail.hallyn.com> (Serge E. Hallyn's message of "Sat, 1 Jan 2011 04:45:22 +0000")
"Serge E. Hallyn" <serge@hallyn.com> writes:
> Quoting Eric W. Biederman (ebiederm@xmission.com):
>> "Serge E. Hallyn" <serge@hallyn.com> writes:
>>
>> > Quoting Eric W. Biederman (ebiederm@xmission.com):
>> >> > --- a/kernel/signal.c
>> >> > +++ b/kernel/signal.c
>> >> > @@ -659,11 +686,7 @@ static int check_kill_permission(int sig, struct siginfo *info,
>> >> > cred = current_cred();
>> >> > tcred = __task_cred(t);
>> >> Nit pick you don't need to compute cred and tcred here now.
>> >
>> > Just to make sure I understand right: you mean wait until after the
>> > same_thread_group() check to save calculation in that case, right?
>>
>> I mean cred and tcred are only use in kill_ok_by_cred.
>> So we can eliminate those two variables from check_kill_permission.
>
> Thanks for the review. Here is an updated version.
This one looks good.
Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
>
> Subject: [PATCH 4/5] allow killing tasks in your own or child userns
>
> Changelog:
> Dec 8: Fixed bug in my check_kill_permission pointed out by
> Eric Biederman.
> Dec 13: Apply Eric's suggestion to pass target task into kill_ok_by_cred()
> for clarity
> Dec 31: address comment by Eric Biederman:
> don't need cred/tcred in check_kill_permission.
>
> Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
> ---
> kernel/signal.c | 36 ++++++++++++++++++++++++++++--------
> 1 files changed, 28 insertions(+), 8 deletions(-)
>
> diff --git a/kernel/signal.c b/kernel/signal.c
> index 4e3cff1..d890c99 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -636,13 +636,39 @@ static inline bool si_fromuser(const struct siginfo *info)
> }
>
> /*
> + * called with RCU read lock from check_kill_permission()
> + */
> +static inline int kill_ok_by_cred(struct task_struct *t)
> +{
> + struct cred *cred = current_cred();
> + struct cred *tcred = __task_cred(t);
> +
> + if (cred->user->user_ns != tcred->user->user_ns) {
> + /* userids are not equivalent - either you have the
> + capability to the target user ns or you don't */
> + if (ns_capable(tcred->user->user_ns, CAP_KILL))
> + return 1;
> + return 0;
> + }
> +
> + /* same user namespace - usual credentials checks apply */
> + if ((cred->euid ^ tcred->suid) &&
> + (cred->euid ^ tcred->uid) &&
> + (cred->uid ^ tcred->suid) &&
> + (cred->uid ^ tcred->uid) &&
> + !ns_capable(tcred->user->user_ns, CAP_KILL))
> + return 0;
> +
> + return 1;
> +}
> +
> +/*
> * Bad permissions for sending the signal
> * - the caller must hold the RCU read lock
> */
> static int check_kill_permission(int sig, struct siginfo *info,
> struct task_struct *t)
> {
> - const struct cred *cred, *tcred;
> struct pid *sid;
> int error;
>
> @@ -656,14 +682,8 @@ static int check_kill_permission(int sig, struct siginfo *info,
> if (error)
> return error;
>
> - cred = current_cred();
> - tcred = __task_cred(t);
> if (!same_thread_group(current, t) &&
> - (cred->euid ^ tcred->suid) &&
> - (cred->euid ^ tcred->uid) &&
> - (cred->uid ^ tcred->suid) &&
> - (cred->uid ^ tcred->uid) &&
> - !capable(CAP_KILL)) {
> + !kill_ok_by_cred(t)) {
> switch (sig) {
> case SIGCONT:
> sid = task_session(t);
next prev parent reply other threads:[~2011-01-01 23:10 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-17 15:22 [RFC 0/5] user namespaces: start clamping down Serge E. Hallyn
[not found] ` <20101217152246.GA8221-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:24 ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Serge E. Hallyn
2010-12-17 15:24 ` Serge E. Hallyn
2010-12-17 15:25 ` [RFC 2/5] user namespaces: make capabilities relative to the user namespace Serge E. Hallyn
2010-12-17 15:26 ` [RFC 3/5] user namespaces: allow sethostname in a container Serge E. Hallyn
[not found] ` <20101217152625.GC11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:26 ` [RFC 4/5] user namespaces: allow killing tasks in your own or child userns Serge E. Hallyn
2010-12-17 15:26 ` Serge E. Hallyn
2010-12-17 15:27 ` [RFC 5/5] user namespaces: Allow ptrace from non-init user namespaces Serge E. Hallyn
[not found] ` <20101217152737.GE11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 19:45 ` Eric W. Biederman
2010-12-17 19:45 ` Eric W. Biederman
2010-12-17 20:04 ` Serge Hallyn
[not found] ` <m1hbecqj2q.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:04 ` Serge Hallyn
2011-01-01 4:47 ` Serge E. Hallyn
2011-01-01 4:47 ` Serge E. Hallyn
2010-12-17 19:31 ` [RFC 4/5] user namespaces: allow killing tasks in your own or child userns Eric W. Biederman
2010-12-17 20:09 ` Serge E. Hallyn
2010-12-17 20:17 ` Eric W. Biederman
2010-12-17 20:22 ` Serge E. Hallyn
[not found] ` <m1d3p0qhl5.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:22 ` Serge E. Hallyn
2011-01-01 4:45 ` Serge E. Hallyn
2011-01-01 4:45 ` Serge E. Hallyn
[not found] ` <20110101044522.GA26476-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2011-01-01 23:10 ` Eric W. Biederman
2011-01-01 23:10 ` Eric W. Biederman [this message]
2011-01-02 14:39 ` Serge E. Hallyn
[not found] ` <m1zkrkuso4.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2011-01-02 14:39 ` Serge E. Hallyn
[not found] ` <20101217200903.GA15528-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 20:17 ` Eric W. Biederman
[not found] ` <m14oacryar.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 20:09 ` Serge E. Hallyn
[not found] ` <20101217152659.GD11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:27 ` [RFC 5/5] user namespaces: Allow ptrace from non-init user namespaces Serge E. Hallyn
2010-12-17 19:31 ` [RFC 4/5] user namespaces: allow killing tasks in your own or child userns Eric W. Biederman
[not found] ` <20101217152547.GB11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:26 ` [RFC 3/5] user namespaces: allow sethostname in a container Serge E. Hallyn
2010-12-17 15:56 ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Alexey Dobriyan
2010-12-17 16:00 ` Alexey Dobriyan
[not found] ` <AANLkTik2ry7zbRMgiwhrXMYfQ4tr07BW0ODCNbKBMWmc-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-12-17 16:17 ` Serge Hallyn
2010-12-17 16:17 ` Serge Hallyn
[not found] ` <AANLkTinPBAPjeEdhn21JN6zVpAKDHR9=3gszj84CyyNx-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-12-17 16:00 ` Alexey Dobriyan
2010-12-17 16:12 ` Serge Hallyn
2010-12-17 16:12 ` Serge Hallyn
[not found] ` <20101217152458.GA11162-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-17 15:25 ` [RFC 2/5] user namespaces: make capabilities relative to the user namespace Serge E. Hallyn
2010-12-17 15:56 ` [RFC 1/5] user namespaces: Add a user_namespace as creator/owner of uts_namespace Alexey Dobriyan
2010-12-17 17:31 ` Greg KH
2010-12-17 17:31 ` Greg KH
[not found] ` <20101217173125.GA29982-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-17 19:26 ` Eric W. Biederman
2010-12-17 19:46 ` Serge Hallyn
2010-12-17 19:26 ` Eric W. Biederman
[not found] ` <m18vzoryit.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 19:58 ` Greg KH
2010-12-17 19:58 ` Greg KH
2010-12-17 20:40 ` Eric W. Biederman
2010-12-17 23:15 ` Greg KH
2010-12-18 6:32 ` Eric W. Biederman
[not found] ` <m1vd2rlhez.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-18 17:56 ` Greg KH
2010-12-18 17:56 ` Greg KH
[not found] ` <20101217231527.GA21227-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-18 6:32 ` Eric W. Biederman
[not found] ` <m1ipysm8us.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-17 23:15 ` Greg KH
[not found] ` <20101217195829.GB1410-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2010-12-17 20:40 ` Eric W. Biederman
2010-12-17 19:46 ` Serge Hallyn
2010-12-17 19:57 ` Greg KH
2010-12-17 19:57 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1zkrkuso4.fsf@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=adobriyan@gmail.com \
--cc=containers@lists.linux-foundation.org \
--cc=jmorris@namei.org \
--cc=kees.cook@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=serge@hallyn.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.