From: "Serge E. Hallyn" <serge@hallyn.com>
To: "Andrew G. Morgan" <morgan@kernel.org>
Cc: linux-kernel@vger.kernel.org, ebiederm@xmission.com,
akpm@linux-foundation.org, oleg@redhat.com, richard@nod.at,
mikevs@xs4all.net, segoon@openwall.com, gregkh@suse.de,
dhowells@redhat.com, eparis@redhat.com,
"Serge E. Hallyn" <serge.hallyn@canonical.com>
Subject: Re: [PATCH 5/9] user namespace: clamp down users of cap_raised
Date: Thu, 20 Oct 2011 13:01:58 +0000 [thread overview]
Message-ID: <20111020130158.GC1315@hallyn.com> (raw)
In-Reply-To: <CALQRfL51U=cuLdVUpFXTog++3WwMjJB+9S6T8gVibC5gdGa5JQ@mail.gmail.com>
Quoting Andrew G. Morgan (morgan@kernel.org):
> On Tue, Oct 18, 2011 at 2:54 PM, Serge Hallyn <serge@hallyn.com> wrote:
> > From: "Serge E. Hallyn" <serge.hallyn@canonical.com>
> >
> > A few modules are using cap_raised(current_cap(), cap) to authorize
> > actions. This means that tasks which are privileged in non-initial
> > user namespaces will be deemed privileged. The privilege should only
> > be granted if the task is in the initial user namespace.
> >
> > Switching the calls to capable() would change the behavior - it would
> > cause the LSM capable hooks to be called, and set PF_SUPERPRIV if
> > the capability was used. So instead, put in an explicit check and
> > refuse privilege if the caller is not in init_user_ns.
> >
> > Vasiliy had suggested introducing a new helper for this. I'm open
> > to suggestions, but for four callers and for a discouraged idiom,
> > I'd rather not pollute the capable* function namespace with a bad name.
> > (even has_capability goes through the LSM hooks)
> >
> > Signed-off-by: Serge E. Hallyn <serge.hallyn@canonical.com>
> > Cc: Eric W. Biederman <ebiederm@xmission.com>
> > Cc: Andrew Morgan <morgan@kernel.org>
> > Cc: Vasiliy Kulikov <segoon@openwall.com>
> > ---
> > drivers/block/drbd/drbd_nl.c | 5 +++++
> > drivers/md/dm-log-userspace-transfer.c | 3 +++
> > drivers/staging/pohmelfs/config.c | 3 +++
> > drivers/video/uvesafb.c | 3 +++
> > 4 files changed, 14 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
> > index 0feab26..9a87a14 100644
> > --- a/drivers/block/drbd/drbd_nl.c
> > +++ b/drivers/block/drbd/drbd_nl.c
> > @@ -2297,6 +2297,11 @@ static void drbd_connector_callback(struct cn_msg *req, struct netlink_skb_parms
> > return;
> > }
> >
> > + if (current_user_ns() != &init_user_ns) {
>
> I'd feel much happier with this if it did use some inline or macro here.
>
> #define NS_IS_NON_DEFAULT (current_user_ns() != &init_user_ns)
>
> if (NS_IS_NON_DEFAULT || !cap_raised(current_cap(), CAP_SYS_ADMIN)) {
> retcode = ERR_PERM;
> goto fail;
> }
Thanks, I'll do something like this.
> Is it important to support the situation that NS support is not configured?
I'm not sure I understand your question right; but if I do - when
NS support is not configured, that just means that all tasks are
in init_user_ns. We sometimes want to shortcut the checks in that
case to speed things up, but NS_IS_NON_DEFAULT() is a valid check
without NS support.
-serge
next prev parent reply other threads:[~2011-10-20 13:01 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-18 21:54 user namespaces: fix some uid/privilege leaks Serge Hallyn
2011-10-18 21:54 ` [PATCH 1/9] pid_ns: ensure pid is not freed during kill_pid_info_as_uid Serge Hallyn
2011-10-18 21:54 ` [PATCH 2/9] user namespace: usb: make usb urbs user namespace aware (v2) Serge Hallyn
2011-10-18 21:54 ` [PATCH 3/9] user namespace: make signal.c respect user namespaces (v4) Serge Hallyn
2011-10-18 21:54 ` [PATCH 4/9] User namespace: don't allow sysctl in non-init user ns (v2) Serge Hallyn
2011-10-18 21:54 ` [PATCH 5/9] user namespace: clamp down users of cap_raised Serge Hallyn
2011-10-19 4:33 ` Andrew G. Morgan
2011-10-19 9:01 ` David Howells
2011-10-20 13:16 ` Serge E. Hallyn
2011-10-24 14:43 ` [PATCH 05/10] " Serge E. Hallyn
2011-10-24 15:47 ` Andrew G. Morgan
2011-10-24 17:28 ` Serge E. Hallyn
2011-10-25 0:43 ` Andrew G. Morgan
2011-10-25 3:03 ` Serge E. Hallyn
2011-10-25 17:33 ` Eric Paris
2011-10-25 20:09 ` Serge E. Hallyn
2011-10-20 13:01 ` Serge E. Hallyn [this message]
2011-10-18 21:54 ` [PATCH 6/9] Add Documentation/namespaces/user_namespace.txt (v3) Serge Hallyn
2011-10-19 9:36 ` David Howells
2011-10-20 12:58 ` Serge E. Hallyn
2011-10-26 20:33 ` [PATCH 06/10] Add Documentation/namespaces/user_namespace.txt (v4) Serge E. Hallyn
2011-10-18 21:54 ` [PATCH 7/9] user namespace: make each net (net_ns) belong to a user_ns Serge Hallyn
2011-10-18 21:54 ` [PATCH 8/9] protect cap_netlink_recv from user namespaces Serge Hallyn
2011-10-18 21:54 ` [PATCH 9/9] make net/core/scm.c uid comparisons user namespace aware Serge Hallyn
2011-10-18 22:14 ` Joe Perches
2011-10-18 23:22 ` Serge E. Hallyn
2011-10-19 2:25 ` [PATCH 9/9] make net/core/scm.c uid comparisons user namespace aware (v2) Serge E. Hallyn
2011-10-19 13:52 ` [PATCH 9/9] make net/core/scm.c uid comparisons user namespace aware Eric W. Biederman
2011-10-20 12:58 ` Serge E. Hallyn
2011-10-20 13:35 ` Eric W. Biederman
2011-10-20 14:14 ` Serge E. Hallyn
2011-10-24 4:15 ` Serge E. Hallyn
2011-10-24 4:27 ` Eric W. Biederman
2011-10-20 14:24 ` Serge E. Hallyn
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=20111020130158.GC1315@hallyn.com \
--to=serge@hallyn.com \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=ebiederm@xmission.com \
--cc=eparis@redhat.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mikevs@xs4all.net \
--cc=morgan@kernel.org \
--cc=oleg@redhat.com \
--cc=richard@nod.at \
--cc=segoon@openwall.com \
--cc=serge.hallyn@canonical.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.