userns: remove unneeded extra argument in selinux's task_has_capability
Subsystems (2)
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.
Signed-off-by Serge E. Hallyn <[email protected]>
--- security/selinux/hooks.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
security/selinux/hooks.c +3 -4
@@ -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
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
@@ -17,7 +17,6 @@#define IPCNS_CALLBACK_PRI 0struct user_namespace ; -extern struct user_namespace init_user_ns;struct ipc_ids {int in_use;
PATCH 3/3 userns: make has_capability* into real functions
In reply to Serge E. Hallynso 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
@@ -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