From: ebiederm@xmission.com (Eric W. Biederman)
To: "Serge E. Hallyn" <serge@hallyn.com>
Cc: LSM <linux-security-module@vger.kernel.org>,
containers@lists.linux-foundation.org,
Kees Cook <kees.cook@canonical.com>,
kernel list <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH 4/4] allow killing tasks in your own or child userns
Date: Fri, 10 Dec 2010 03:16:34 -0800 [thread overview]
Message-ID: <m14oal3mjx.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <20101209173245.GB10206@mail.hallyn.com> (Serge E. Hallyn's message of "Thu, 9 Dec 2010 17:32:45 +0000")
"Serge E. Hallyn" <serge@hallyn.com> writes:
> Changelog:
> Dec 8: Fixed bug in my check_kill_permission pointed out by
> Eric Biederman.
>
> To test:
> 1. Test killing tasks as usual. No change.
> 2. Clone a new user namespace without a new pidns.
> a. You CAN kill -CONT tasks in your thread group but outside
> your user ns.
> b. You can NOT otherwise kill tasks outside your user_ns.
> c. Inside your new userns, signal semantics are as normal
> with respect to userids, CAP_KILL, and thread groups.
>
> Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
> ---
> kernel/signal.c | 27 ++++++++++++++++++++++-----
> 1 files changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/signal.c b/kernel/signal.c
> index 4e3cff1..677025c 100644
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -635,6 +635,27 @@ static inline bool si_fromuser(const struct siginfo *info)
> (!is_si_special(info) && SI_FROMUSER(info));
> }
>
> +static inline int kill_ok_by_cred(struct cred *cred, struct cred *tcred)
> +{
Nit: You should just pass in the target task here.
Making it abundantly clear where current and tcred come from.
ns_capable implicitly uses current which is a little surprising
when everything else is being passed in, but makes perfect sense
in this context.
> + 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
> @@ -659,11 +680,7 @@ static int check_kill_permission(int sig, struct siginfo *info,
> 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(cred, tcred)) {
> switch (sig) {
> case SIGCONT:
> sid = task_session(t);
next prev parent reply other threads:[~2010-12-10 11:16 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-09 17:20 [RFC PATCH 1/4] Add a user_namespace as creator/owner of uts_namespace Serge E. Hallyn
2010-12-09 17:28 ` [RFC PATCH 2/4] security: Make capabilities relative to the user namespace Serge E. Hallyn
2010-12-09 17:30 ` [RFC PATCH 3/4] allow sethostname in a container Serge E. Hallyn
2010-12-09 17:32 ` [RFC PATCH 4/4] allow killing tasks in your own or child userns Serge E. Hallyn
2010-12-10 11:16 ` Eric W. Biederman [this message]
2010-12-10 16:02 ` Serge E. Hallyn
[not found] ` <m14oal3mjx.fsf-+imSwln9KH6u2/kzUuoCbdi2O/JbrIOy@public.gmane.org>
2010-12-10 16:02 ` Serge E. Hallyn
[not found] ` <20101209173245.GB10206-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-10 11:16 ` Eric W. Biederman
[not found] ` <20101209173050.GA10206-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-09 17:32 ` Serge E. Hallyn
[not found] ` <20101209172843.GA10155-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-09 17:30 ` [RFC PATCH 3/4] allow sethostname in a container Serge E. Hallyn
[not found] ` <20101209172027.GA10085-7LNsyQBKDXoIagZqoN9o3w@public.gmane.org>
2010-12-09 17:28 ` [RFC PATCH 2/4] security: Make capabilities relative to the user namespace Serge E. Hallyn
2010-12-11 0:50 ` [RFC PATCH 1/4] Add a user_namespace as creator/owner of uts_namespace Alexey Dobriyan
2010-12-11 0:50 ` Alexey Dobriyan
[not found] ` <20101211005044.GA25513-ymPLPWd2ZGbSs3Ovhc6N8g@public.gmane.org>
2010-12-11 1:29 ` Eric W. Biederman
2010-12-11 1:29 ` Eric W. Biederman
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=m14oal3mjx.fsf@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=containers@lists.linux-foundation.org \
--cc=kees.cook@canonical.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--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.