mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Merge branch 'for-linus' of git://selinuxproject.org/~jmorris/linux-security
* 'for-linus' of git://selinuxproject.org/~jmorris/linux-security: capabilities: remove __cap_full_set definition security: remove the security_netlink_recv hook as it is equivalent to capable() ptrace: do not audit capability check when outputing /proc/pid/stat capabilities: remove task_ns_* functions capabitlies: ns_capable can use the cap helpers rather than lsm call capabilities: style only - move capable below ns_capable capabilites: introduce new has_ns_capabilities_noaudit capabilities: call has_ns_capability from has_capability capabilities: remove all _real_ interfaces capabilities: introduce security_capable_noaudit capabilities: reverse arguments to security_capable capabilities: remove the task from capable LSM hook entirely selinux: sparse fix: fix several warnings in the security server cod selinux: sparse fix: fix warnings in netlink code selinux: sparse fix: eliminate warnings for selinuxfs selinux: sparse fix: declare selinux_disable() in security.h selinux: sparse fix: move selinux_complete_init selinux: sparse fix: make selinux_secmark_refcount static SELinux: Fix RCU deref check warning in sel_netport_insert() Manually fix up a semantic mis-merge wrt security_netlink_recv(): - the interface was removed in commitfd77846152
("security: remove the security_netlink_recv hook as it is equivalent to capable()") - a new user of it appeared in commita38f7907b9
("crypto: Add userspace configuration API") causing no automatic merge conflict, but Eric Paris pointed out the issue.
This commit is contained in:
commit
c49c41a413
24 changed files with 134 additions and 203 deletions
|
@ -287,24 +287,7 @@ error:
|
|||
}
|
||||
|
||||
/**
|
||||
* has_capability - Does a task have a capability in init_user_ns
|
||||
* @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 to the initial user namespace, false if not.
|
||||
*
|
||||
* Note that this does not set PF_SUPERPRIV on the task.
|
||||
*/
|
||||
bool has_capability(struct task_struct *t, int cap)
|
||||
{
|
||||
int ret = security_real_capable(t, &init_user_ns, cap);
|
||||
|
||||
return (ret == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* has_capability - Does a task have a capability in a specific user ns
|
||||
* has_ns_capability - Does a task have a capability in a specific user ns
|
||||
* @t: The task in question
|
||||
* @ns: target user namespace
|
||||
* @cap: The capability to be tested for
|
||||
|
@ -317,13 +300,58 @@ bool has_capability(struct task_struct *t, int cap)
|
|||
bool has_ns_capability(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
int ret = security_real_capable(t, ns, cap);
|
||||
int ret;
|
||||
|
||||
rcu_read_lock();
|
||||
ret = security_capable(__task_cred(t), ns, cap);
|
||||
rcu_read_unlock();
|
||||
|
||||
return (ret == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* has_capability_noaudit - Does a task have a capability (unaudited)
|
||||
* has_capability - Does a task have a capability in init_user_ns
|
||||
* @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 to the initial user namespace, false if not.
|
||||
*
|
||||
* Note that this does not set PF_SUPERPRIV on the task.
|
||||
*/
|
||||
bool has_capability(struct task_struct *t, int cap)
|
||||
{
|
||||
return has_ns_capability(t, &init_user_ns, cap);
|
||||
}
|
||||
|
||||
/**
|
||||
* has_ns_capability_noaudit - Does a task have a capability (unaudited)
|
||||
* in a specific user ns.
|
||||
* @t: The task in question
|
||||
* @ns: target user namespace
|
||||
* @cap: The capability to be tested for
|
||||
*
|
||||
* Return true if the specified task has the given superior capability
|
||||
* currently in effect to the specified user namespace, false if not.
|
||||
* Do not write an audit message for the check.
|
||||
*
|
||||
* Note that this does not set PF_SUPERPRIV on the task.
|
||||
*/
|
||||
bool has_ns_capability_noaudit(struct task_struct *t,
|
||||
struct user_namespace *ns, int cap)
|
||||
{
|
||||
int ret;
|
||||
|
||||
rcu_read_lock();
|
||||
ret = security_capable_noaudit(__task_cred(t), ns, cap);
|
||||
rcu_read_unlock();
|
||||
|
||||
return (ret == 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* has_capability_noaudit - Does a task have a capability (unaudited) in the
|
||||
* initial user ns
|
||||
* @t: The task in question
|
||||
* @cap: The capability to be tested for
|
||||
*
|
||||
|
@ -335,27 +363,9 @@ bool has_ns_capability(struct task_struct *t,
|
|||
*/
|
||||
bool has_capability_noaudit(struct task_struct *t, int cap)
|
||||
{
|
||||
int ret = security_real_capable_noaudit(t, &init_user_ns, cap);
|
||||
|
||||
return (ret == 0);
|
||||
return has_ns_capability_noaudit(t, &init_user_ns, cap);
|
||||
}
|
||||
|
||||
/**
|
||||
* capable - Determine if the current task has a superior capability in effect
|
||||
* @cap: The capability to be tested for
|
||||
*
|
||||
* Return true if the current task has the given superior capability currently
|
||||
* available for use, false if not.
|
||||
*
|
||||
* This sets PF_SUPERPRIV on the task if the capability is available on the
|
||||
* assumption that it's about to be used.
|
||||
*/
|
||||
bool capable(int cap)
|
||||
{
|
||||
return ns_capable(&init_user_ns, cap);
|
||||
}
|
||||
EXPORT_SYMBOL(capable);
|
||||
|
||||
/**
|
||||
* ns_capable - Determine if the current task has a superior capability in effect
|
||||
* @ns: The usernamespace we want the capability in
|
||||
|
@ -374,7 +384,7 @@ bool ns_capable(struct user_namespace *ns, int cap)
|
|||
BUG();
|
||||
}
|
||||
|
||||
if (security_capable(ns, current_cred(), cap) == 0) {
|
||||
if (has_ns_capability(current, ns, cap)) {
|
||||
current->flags |= PF_SUPERPRIV;
|
||||
return true;
|
||||
}
|
||||
|
@ -383,18 +393,20 @@ bool ns_capable(struct user_namespace *ns, int cap)
|
|||
EXPORT_SYMBOL(ns_capable);
|
||||
|
||||
/**
|
||||
* task_ns_capable - Determine whether current task has a superior
|
||||
* capability targeted at a specific task's user namespace.
|
||||
* @t: The task whose user namespace is targeted.
|
||||
* @cap: The capability in question.
|
||||
* capable - Determine if the current task has a superior capability in effect
|
||||
* @cap: The capability to be tested for
|
||||
*
|
||||
* Return true if it does, false otherwise.
|
||||
* Return true if the current task has the given superior capability currently
|
||||
* available for use, false if not.
|
||||
*
|
||||
* This sets PF_SUPERPRIV on the task if the capability is available on the
|
||||
* assumption that it's about to be used.
|
||||
*/
|
||||
bool task_ns_capable(struct task_struct *t, int cap)
|
||||
bool capable(int cap)
|
||||
{
|
||||
return ns_capable(task_cred_xxx(t, user)->user_ns, cap);
|
||||
return ns_capable(&init_user_ns, cap);
|
||||
}
|
||||
EXPORT_SYMBOL(task_ns_capable);
|
||||
EXPORT_SYMBOL(capable);
|
||||
|
||||
/**
|
||||
* nsown_capable - Check superior capability to one's own user_ns
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue