|
@@ -623,26 +623,24 @@ struct smack_known *smack_from_secid(const u32 secid)
|
|
LIST_HEAD(smack_onlycap_list);
|
|
LIST_HEAD(smack_onlycap_list);
|
|
DEFINE_MUTEX(smack_onlycap_lock);
|
|
DEFINE_MUTEX(smack_onlycap_lock);
|
|
|
|
|
|
-/*
|
|
|
|
|
|
+/**
|
|
|
|
+ * smack_privileged_cred - are all privilege requirements met by cred
|
|
|
|
+ * @cap: The requested capability
|
|
|
|
+ * @cred: the credential to use
|
|
|
|
+ *
|
|
* Is the task privileged and allowed to be privileged
|
|
* Is the task privileged and allowed to be privileged
|
|
* by the onlycap rule.
|
|
* by the onlycap rule.
|
|
*
|
|
*
|
|
* Returns true if the task is allowed to be privileged, false if it's not.
|
|
* Returns true if the task is allowed to be privileged, false if it's not.
|
|
*/
|
|
*/
|
|
-bool smack_privileged(int cap)
|
|
|
|
|
|
+bool smack_privileged_cred(int cap, const struct cred *cred)
|
|
{
|
|
{
|
|
- struct smack_known *skp = smk_of_current();
|
|
|
|
|
|
+ struct task_smack *tsp = cred->security;
|
|
|
|
+ struct smack_known *skp = tsp->smk_task;
|
|
struct smack_known_list_elem *sklep;
|
|
struct smack_known_list_elem *sklep;
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
- /*
|
|
|
|
- * All kernel tasks are privileged
|
|
|
|
- */
|
|
|
|
- if (unlikely(current->flags & PF_KTHREAD))
|
|
|
|
- return true;
|
|
|
|
-
|
|
|
|
- rc = cap_capable(current_cred(), &init_user_ns, cap,
|
|
|
|
- SECURITY_CAP_AUDIT);
|
|
|
|
|
|
+ rc = cap_capable(cred, &init_user_ns, cap, SECURITY_CAP_AUDIT);
|
|
if (rc)
|
|
if (rc)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
@@ -662,3 +660,23 @@ bool smack_privileged(int cap)
|
|
|
|
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * smack_privileged - are all privilege requirements met
|
|
|
|
+ * @cap: The requested capability
|
|
|
|
+ *
|
|
|
|
+ * Is the task privileged and allowed to be privileged
|
|
|
|
+ * by the onlycap rule.
|
|
|
|
+ *
|
|
|
|
+ * Returns true if the task is allowed to be privileged, false if it's not.
|
|
|
|
+ */
|
|
|
|
+bool smack_privileged(int cap)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * All kernel tasks are privileged
|
|
|
|
+ */
|
|
|
|
+ if (unlikely(current->flags & PF_KTHREAD))
|
|
|
|
+ return true;
|
|
|
|
+
|
|
|
|
+ return smack_privileged_cred(cap, current_cred());
|
|
|
|
+}
|