diff options
Diffstat (limited to 'security/apparmor/ipc.c')
| -rw-r--r-- | security/apparmor/ipc.c | 35 | 
1 files changed, 16 insertions, 19 deletions
diff --git a/security/apparmor/ipc.c b/security/apparmor/ipc.c index 649fad88869..777ac1c4725 100644 --- a/security/apparmor/ipc.c +++ b/security/apparmor/ipc.c @@ -19,13 +19,14 @@  #include "include/capability.h"  #include "include/context.h"  #include "include/policy.h" +#include "include/ipc.h"  /* call back to audit ptrace fields */  static void audit_cb(struct audit_buffer *ab, void *va)  {  	struct common_audit_data *sa = va;  	audit_log_format(ab, " target="); -	audit_log_untrustedstring(ab, sa->aad.target); +	audit_log_untrustedstring(ab, sa->aad->target);  }  /** @@ -40,10 +41,12 @@ static int aa_audit_ptrace(struct aa_profile *profile,  			   struct aa_profile *target, int error)  {  	struct common_audit_data sa; -	COMMON_AUDIT_DATA_INIT(&sa, NONE); -	sa.aad.op = OP_PTRACE; -	sa.aad.target = target; -	sa.aad.error = error; +	struct apparmor_audit_data aad = {0,}; +	sa.type = LSM_AUDIT_DATA_NONE; +	sa.aad = &aad; +	aad.op = OP_PTRACE; +	aad.target = target; +	aad.error = error;  	return aa_audit(AUDIT_APPARMOR_AUTO, profile, GFP_ATOMIC, &sa,  			audit_cb); @@ -51,15 +54,14 @@ static int aa_audit_ptrace(struct aa_profile *profile,  /**   * aa_may_ptrace - test if tracer task can trace the tracee - * @tracer_task: task who will do the tracing  (NOT NULL)   * @tracer: profile of the task doing the tracing  (NOT NULL)   * @tracee: task to be traced   * @mode: whether PTRACE_MODE_READ || PTRACE_MODE_ATTACH   *   * Returns: %0 else error code if permission denied or error   */ -int aa_may_ptrace(struct task_struct *tracer_task, struct aa_profile *tracer, -		  struct aa_profile *tracee, unsigned int mode) +int aa_may_ptrace(struct aa_profile *tracer, struct aa_profile *tracee, +		  unsigned int mode)  {  	/* TODO: currently only based on capability, not extended ptrace  	 *       rules, @@ -69,7 +71,7 @@ int aa_may_ptrace(struct task_struct *tracer_task, struct aa_profile *tracer,  	if (unconfined(tracer) || tracer == tracee)  		return 0;  	/* log this capability request */ -	return aa_capable(tracer_task, tracer, CAP_SYS_PTRACE, 1); +	return aa_capable(tracer, CAP_SYS_PTRACE, 1);  }  /** @@ -92,23 +94,18 @@ int aa_ptrace(struct task_struct *tracer, struct task_struct *tracee,  	 *       - tracer profile has CAP_SYS_PTRACE  	 */ -	struct aa_profile *tracer_p; -	/* cred released below */ -	const struct cred *cred = get_task_cred(tracer); +	struct aa_profile *tracer_p = aa_get_task_profile(tracer);  	int error = 0; -	tracer_p = aa_cred_profile(cred);  	if (!unconfined(tracer_p)) { -		/* lcred released below */ -		const struct cred *lcred = get_task_cred(tracee); -		struct aa_profile *tracee_p = aa_cred_profile(lcred); +		struct aa_profile *tracee_p = aa_get_task_profile(tracee); -		error = aa_may_ptrace(tracer, tracer_p, tracee_p, mode); +		error = aa_may_ptrace(tracer_p, tracee_p, mode);  		error = aa_audit_ptrace(tracer_p, tracee_p, error); -		put_cred(lcred); +		aa_put_profile(tracee_p);  	} -	put_cred(cred); +	aa_put_profile(tracer_p);  	return error;  }  | 
