From mboxrd@z Thu Jan 1 00:00:00 1970 From: Serge Hallyn Subject: [PATCH 03/15] keyctl: check capabilities against key's user_ns Date: Fri, 2 Sep 2011 19:56:28 +0000 Message-ID: <1314993400-6910-6-git-send-email-serge@hallyn.com> References: <1314993400-6910-1-git-send-email-serge@hallyn.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: akpm-3NddpPZAyC0@public.gmane.org, segooon-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, dhowells-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org, Return-path: In-Reply-To: <1314993400-6910-1-git-send-email-serge-A9i7LUbDfNHQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org List-Id: netdev.vger.kernel.org From: "Serge E. Hallyn" ATM, task should only be able to get his own user_ns's keys anyway, so nsown_capable should also work, but there is no advantage to doing that, while using key's user_ns is clearer. changelog: jun 6: compile fix: keyctl.c (key_user, not key has user_ns) Signed-off-by: Serge E. Hallyn Acked-by: David Howells Cc: Eric W. Biederman --- security/keys/keyctl.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c index eca5191..fa7d420 100644 --- a/security/keys/keyctl.c +++ b/security/keys/keyctl.c @@ -745,7 +745,7 @@ long keyctl_chown_key(key_serial_t id, uid_t uid, gid_t gid) ret = -EACCES; down_write(&key->sem); - if (!capable(CAP_SYS_ADMIN)) { + if (!ns_capable(key->user->user_ns, CAP_SYS_ADMIN)) { /* only the sysadmin can chown a key to some other UID */ if (uid != (uid_t) -1 && key->uid != uid) goto error_put; @@ -852,7 +852,8 @@ long keyctl_setperm_key(key_serial_t id, key_perm_t perm) down_write(&key->sem); /* if we're not the sysadmin, we can only change a key that we own */ - if (capable(CAP_SYS_ADMIN) || key->uid == current_fsuid()) { + if (ns_capable(key->user->user_ns, CAP_SYS_ADMIN) || + key->uid == current_fsuid()) { key->perm = perm; ret = 0; } -- 1.7.5.4