diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/auditsc.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index d1eab1d4a930..fa7b8047aab8 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -840,6 +840,13 @@ static inline void audit_proctitle_free(struct audit_context *context)  	context->proctitle.len = 0;  } +static inline void audit_free_module(struct audit_context *context) +{ +	if (context->type == AUDIT_KERN_MODULE) { +		kfree(context->module.name); +		context->module.name = NULL; +	} +}  static inline void audit_free_names(struct audit_context *context)  {  	struct audit_names *n, *next; @@ -923,6 +930,7 @@ int audit_alloc(struct task_struct *tsk)  static inline void audit_free_context(struct audit_context *context)  { +	audit_free_module(context);  	audit_free_names(context);  	unroll_tree_refs(context, NULL, 0);  	free_tree_refs(context); @@ -1266,7 +1274,6 @@ static void show_special(struct audit_context *context, int *call_panic)  		audit_log_format(ab, "name=");  		if (context->module.name) {  			audit_log_untrustedstring(ab, context->module.name); -			kfree(context->module.name);  		} else  			audit_log_format(ab, "(null)"); @@ -1697,6 +1704,7 @@ void __audit_syscall_exit(int success, long return_code)  	context->in_syscall = 0;  	context->prio = context->state == AUDIT_RECORD_CONTEXT ? ~0ULL : 0; +	audit_free_module(context);  	audit_free_names(context);  	unroll_tree_refs(context, NULL, 0);  	audit_free_aux(context);  | 
