mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: James Morris <jmorris@namei.org>
To: linux-security-module@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 07/20] SELinux: enable processes with mac_admin to get the raw inode contexts
Date: Tue,  8 Jul 2008 01:42:09 +0900	[thread overview]
Message-ID: <1215448942-17581-8-git-send-email-jmorris@namei.org> (raw)
In-Reply-To: <1215448942-17581-1-git-send-email-jmorris@namei.org>

From: Stephen Smalley <sds@tycho.nsa.gov>

Enable processes with CAP_MAC_ADMIN + mac_admin permission in policy
to get undefined contexts on inodes.  This extends the support for
deferred mapping of security contexts in order to permit restorecon
and similar programs to see the raw file contexts unknown to the
system policy in order to check them.

Signed-off-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
---
 security/selinux/hooks.c |   27 +++++++++++++++++++++++----
 1 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 4be1563..91b666a 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -2754,9 +2754,7 @@ static int selinux_inode_removexattr(struct dentry *dentry, const char *name)
 }
 
 /*
- * Copy the in-core inode security context value to the user.  If the
- * getxattr() prior to this succeeded, check to see if we need to
- * canonicalize the value to be finally returned to the user.
+ * Copy the inode security context value to the user.
  *
  * Permission check is handled by selinux_inode_getxattr hook.
  */
@@ -2765,12 +2763,33 @@ static int selinux_inode_getsecurity(const struct inode *inode, const char *name
 	u32 size;
 	int error;
 	char *context = NULL;
+	struct task_security_struct *tsec = current->security;
 	struct inode_security_struct *isec = inode->i_security;
 
 	if (strcmp(name, XATTR_SELINUX_SUFFIX))
 		return -EOPNOTSUPP;
 
-	error = security_sid_to_context(isec->sid, &context, &size);
+	/*
+	 * If the caller has CAP_MAC_ADMIN, then get the raw context
+	 * value even if it is not defined by current policy; otherwise,
+	 * use the in-core value under current policy.
+	 * Use the non-auditing forms of the permission checks since
+	 * getxattr may be called by unprivileged processes commonly
+	 * and lack of permission just means that we fall back to the
+	 * in-core context value, not a denial.
+	 */
+	error = secondary_ops->capable(current, CAP_MAC_ADMIN);
+	if (!error)
+		error = avc_has_perm_noaudit(tsec->sid, tsec->sid,
+					     SECCLASS_CAPABILITY2,
+					     CAPABILITY2__MAC_ADMIN,
+					     0,
+					     NULL);
+	if (!error)
+		error = security_sid_to_context_force(isec->sid, &context,
+						      &size);
+	else
+		error = security_sid_to_context(isec->sid, &context, &size);
 	if (error)
 		return error;
 	error = size;
-- 
1.5.5.1


  parent reply	other threads:[~2008-07-07 16:53 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-07 16:42 SELinux patches for 2.6.26 James Morris
2008-07-07 16:42 ` [PATCH 01/20] selinux: support deferred mapping of contexts James Morris
2008-07-07 16:42 ` [PATCH 02/20] SELinux: fix sleeping allocation in security_context_to_sid James Morris
2008-07-07 16:42 ` [PATCH 03/20] SELinux: keep the code clean formating and syntax James Morris
2008-07-07 16:42 ` [PATCH 04/20] SELinux: reorder inode_security_struct to increase objs/slab on 64bit James Morris
2008-07-07 16:42 ` [PATCH 05/20] SELinux: remove inherit field from inode_security_struct James Morris
2008-07-07 16:42 ` [PATCH 06/20] Security: split proc ptrace checking into read vs. attach James Morris
2008-07-07 16:42 ` James Morris [this message]
2008-07-07 16:42 ` [PATCH 08/20] selinux: simplify ioctl checking James Morris
2008-07-07 16:42 ` [PATCH 09/20] selinux: fix endianness bug in network node address handling James Morris
2008-07-07 16:42 ` [PATCH 10/20] SELinux: open code policy_rwlock James Morris
2008-07-07 16:42 ` [PATCH 11/20] SELinux: open code load_mutex James Morris
2008-07-07 16:42 ` [PATCH 12/20] SELinux: open code sidtab lock James Morris
2008-07-07 16:42 ` [PATCH 13/20] SELinux: fix off by 1 reference of class_to_string in context_struct_compute_av James Morris
2008-07-07 16:42 ` [PATCH 14/20] SELinux: drop load_mutex in security_load_policy James Morris
2008-07-07 16:42 ` [PATCH 15/20] selinux: change handling of invalid classes (Was: Re: 2.6.26-rc5-mm1 selinux whine) James Morris
2008-07-07 16:42 ` [PATCH 16/20] SELinux: more user friendly unknown handling printk James Morris
2008-07-07 16:42 ` [PATCH 17/20] SELinux: remove unused and shadowed addrlen variable James Morris
2008-07-07 16:42 ` [PATCH 18/20] SELinux: use do_each_thread as a proper do/while block James Morris
2008-07-07 16:42 ` [PATCH 19/20] security: fix return of void-valued expressions James Morris
2008-07-07 16:42 ` [PATCH 20/20] SELinux: allow fstype unknown to policy to use xattrs if present James Morris
2008-07-07 18:23 ` SELinux patches for 2.6.26 Theodore Tso
2008-07-07 22:49   ` James Morris

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=1215448942-17581-8-git-send-email-jmorris@namei.org \
    --to=jmorris@namei.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®