Skip to contentSkip to conversation

userns: remove unneeded extra argument in selinux's task_has_capability

PATCH New Serge E. Hallyn 1 participant 3 messages Mar 3, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/3 userns: remove unneeded extra argument in selinux's task_has_capability

The user_namespace argument is not used by task_has_capability, so get rid of it. Note that it was spuriously added by the user namespace patchset, so we're just cleaning up our own mess.

---
 security/selinux/hooks.c |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
security/selinux/hooks.c +3 -4
Index: linux-2.6/security/selinux/hooks.c
===================================================================
@@ -1419,7 +1419,6 @@
 /* Check whether a task is allowed to use a capability. */
 static int task_has_capability(struct task_struct *tsk,
 			       const struct cred *cred,
-			       struct user_namespace *ns,
 			       int cap, int audit)
 {
 	struct common_audit_data ad;
@@ -1856,7 +1855,7 @@
 	if (rc)
 		return rc;
 
-	return task_has_capability(tsk, cred, ns, cap, audit);
+	return task_has_capability(tsk, cred, cap, audit);
 }
 
 static int selinux_quotactl(int cmds, int type, int id, struct super_block *sb)
@@ -2886,8 +2885,8 @@
 
 	case KDSKBENT:
 	case KDSKBSENT:
-		error = task_has_capability(current, cred, &init_user_ns,
-					CAP_SYS_TTY_CONFIG, SECURITY_CAP_AUDIT);
+		error = task_has_capability(current, cred, CAP_SYS_TTY_CONFIG,
+					SECURITY_CAP_AUDIT);
 		break;
 
 	/* default case assumes that the command will go
#1 lore raw

PATCH 2/3 userns: don't define init_user_ns in ipc_namespace.h

It shouldn't be needed since ipc/msgutil.c includes security.h which includes fs.h, which forward declares it.

---
 include/linux/ipc_namespace.h |    1 -
 1 file changed, 1 deletion(-)
include/linux/ipc_namespace.h +0 -1
Index: linux-2.6/include/linux/ipc_namespace.h
===================================================================
@@ -17,7 +17,6 @@
 #define IPCNS_CALLBACK_PRI 0
 
 struct user_namespace;
-extern struct user_namespace init_user_ns;
 
 struct ipc_ids {
 	int in_use;
#2 lore raw

PATCH 3/3 userns: make has_capability* into real functions

In reply to Serge E. Hallyn

so we can let type safety keep things sane, and as a bonus we can remove the declaration of init_user_ns in capability.h.

---
 include/linux/capability.h |   34 +++-----------------------
 kernel/capability.c        |   57 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+), 30 deletions(-)
include/linux/capability.h +4 -30
Index: linux-2.6/include/linux/capability.h
===================================================================
@@ -371,8 +371,6 @@
 struct dentry;
 struct user_namespace;
 
-extern struct user_namespace init_user_ns;
-
 struct user_namespace *current_user_ns(void);
 
 extern const kernel_cap_t __cap_empty_set;
@@ -541,34 +539,10 @@
 			   cap_intersect(permitted, __cap_nfsd_set));
 }
 
-/**
- * has_capability - Determine if a task has a superior capability available
- * @t: The task in question
- * @cap: The capability to be tested for
- *
- * Return true if the specified task has the given superior capability
- * currently in effect, false if not.
- *
- * Note that this does not set PF_SUPERPRIV on the task.
- */
-#define has_capability(t, cap) (security_real_capable((t), &init_user_ns, (cap)) == 0)
-
-#define has_ns_capability(t, ns, cap) (security_real_capable((t), (ns), (cap)) == 0)
-
-/**
- * has_capability_noaudit - Determine if a task has a superior capability available (unaudited)
- * @t: The task in question
- * @cap: The capability to be tested for
- *
- * Return true if the specified task has the given superior capability
- * currently in effect, false if not, but don't write an audit message for the
- * check.
- *
- * Note that this does not set PF_SUPERPRIV on the task.
- */
-#define has_capability_noaudit(t, cap) \
-	(security_real_capable_noaudit((t), &init_user_ns, (cap)) == 0)
-
+extern bool has_capability(struct task_struct *t, int cap);
+extern bool has_ns_capability(struct task_struct *t,
+			      struct user_namespace *ns, int cap);
+extern bool has_capability_noaudit(struct task_struct *t, int cap);
 extern bool capable(int cap);
 extern bool ns_capable(struct user_namespace *ns, int cap);
 extern bool task_ns_capable(struct task_struct *t, int cap);
kernel/capability.c +54 -0

60 lines not on this page · raw message