|
@@ -43,8 +43,6 @@
|
|
|
#include <linux/binfmts.h>
|
|
|
#include "smack.h"
|
|
|
|
|
|
-#define task_security(task) (task_cred_xxx((task), security))
|
|
|
-
|
|
|
#define TRANS_TRUE "TRUE"
|
|
|
#define TRANS_TRUE_SIZE 4
|
|
|
|
|
@@ -123,7 +121,7 @@ static int smk_bu_current(char *note, struct smack_known *oskp,
|
|
|
static int smk_bu_task(struct task_struct *otp, int mode, int rc)
|
|
|
{
|
|
|
struct task_smack *tsp = current_security();
|
|
|
- struct task_smack *otsp = task_security(otp);
|
|
|
+ struct smack_known *smk_task = smk_of_task_struct(otp);
|
|
|
char acc[SMK_NUM_ACCESS_TYPE + 1];
|
|
|
|
|
|
if (rc <= 0)
|
|
@@ -131,7 +129,7 @@ static int smk_bu_task(struct task_struct *otp, int mode, int rc)
|
|
|
|
|
|
smk_bu_mode(mode, acc);
|
|
|
pr_info("Smack Bringup: (%s %s %s) %s to %s\n",
|
|
|
- tsp->smk_task->smk_known, otsp->smk_task->smk_known, acc,
|
|
|
+ tsp->smk_task->smk_known, smk_task->smk_known, acc,
|
|
|
current->comm, otp->comm);
|
|
|
return 0;
|
|
|
}
|
|
@@ -352,7 +350,8 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
|
|
|
saip = &ad;
|
|
|
}
|
|
|
|
|
|
- tsp = task_security(tracer);
|
|
|
+ rcu_read_lock();
|
|
|
+ tsp = __task_cred(tracer)->security;
|
|
|
tracer_known = smk_of_task(tsp);
|
|
|
|
|
|
if ((mode & PTRACE_MODE_ATTACH) &&
|
|
@@ -372,11 +371,14 @@ static int smk_ptrace_rule_check(struct task_struct *tracer,
|
|
|
tracee_known->smk_known,
|
|
|
0, rc, saip);
|
|
|
|
|
|
+ rcu_read_unlock();
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
/* In case of rule==SMACK_PTRACE_DEFAULT or mode==PTRACE_MODE_READ */
|
|
|
rc = smk_tskacc(tsp, tracee_known, smk_ptrace_mode(mode), saip);
|
|
|
+
|
|
|
+ rcu_read_unlock();
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
@@ -403,7 +405,7 @@ static int smack_ptrace_access_check(struct task_struct *ctp, unsigned int mode)
|
|
|
if (rc != 0)
|
|
|
return rc;
|
|
|
|
|
|
- skp = smk_of_task(task_security(ctp));
|
|
|
+ skp = smk_of_task_struct(ctp);
|
|
|
|
|
|
rc = smk_ptrace_rule_check(current, skp, mode, __func__);
|
|
|
return rc;
|
|
@@ -1830,7 +1832,7 @@ static int smk_curacc_on_task(struct task_struct *p, int access,
|
|
|
const char *caller)
|
|
|
{
|
|
|
struct smk_audit_info ad;
|
|
|
- struct smack_known *skp = smk_of_task(task_security(p));
|
|
|
+ struct smack_known *skp = smk_of_task_struct(p);
|
|
|
int rc;
|
|
|
|
|
|
smk_ad_init(&ad, caller, LSM_AUDIT_DATA_TASK);
|
|
@@ -1883,7 +1885,7 @@ static int smack_task_getsid(struct task_struct *p)
|
|
|
*/
|
|
|
static void smack_task_getsecid(struct task_struct *p, u32 *secid)
|
|
|
{
|
|
|
- struct smack_known *skp = smk_of_task(task_security(p));
|
|
|
+ struct smack_known *skp = smk_of_task_struct(p);
|
|
|
|
|
|
*secid = skp->smk_secid;
|
|
|
}
|
|
@@ -1990,7 +1992,7 @@ static int smack_task_kill(struct task_struct *p, struct siginfo *info,
|
|
|
{
|
|
|
struct smk_audit_info ad;
|
|
|
struct smack_known *skp;
|
|
|
- struct smack_known *tkp = smk_of_task(task_security(p));
|
|
|
+ struct smack_known *tkp = smk_of_task_struct(p);
|
|
|
int rc;
|
|
|
|
|
|
smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
|
|
@@ -2044,7 +2046,7 @@ static int smack_task_wait(struct task_struct *p)
|
|
|
static void smack_task_to_inode(struct task_struct *p, struct inode *inode)
|
|
|
{
|
|
|
struct inode_smack *isp = inode->i_security;
|
|
|
- struct smack_known *skp = smk_of_task(task_security(p));
|
|
|
+ struct smack_known *skp = smk_of_task_struct(p);
|
|
|
|
|
|
isp->smk_inode = skp;
|
|
|
}
|
|
@@ -3226,7 +3228,7 @@ unlockandout:
|
|
|
*/
|
|
|
static int smack_getprocattr(struct task_struct *p, char *name, char **value)
|
|
|
{
|
|
|
- struct smack_known *skp = smk_of_task(task_security(p));
|
|
|
+ struct smack_known *skp = smk_of_task_struct(p);
|
|
|
char *cp;
|
|
|
int slen;
|
|
|
|