diff options
| -rw-r--r-- | fs/namei.c | 1 | ||||
| -rw-r--r-- | kernel/auditsc.c | 40 | 
2 files changed, 4 insertions, 37 deletions
diff --git a/fs/namei.c b/fs/namei.c index 5ec3515162e6..a3fde77d4abf 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -243,6 +243,7 @@ getname_kernel(const char * filename)  	memcpy((char *)result->name, filename, len);  	result->uptr = NULL;  	result->aname = NULL; +	audit_getname(result);  	return result;  } diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 072566dd0caf..132dbcdef6ec 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -1882,44 +1882,10 @@ out_alloc:  	n = audit_alloc_name(context, AUDIT_TYPE_UNKNOWN);  	if (!n)  		return; -	/* unfortunately, while we may have a path name to record with the -	 * inode, we can't always rely on the string lasting until the end of -	 * the syscall so we need to create our own copy, it may fail due to -	 * memory allocation issues, but we do our best */ -	if (name) { -		/* we can't use getname_kernel() due to size limits */ -		size_t len = strlen(name->name) + 1; -		struct filename *new = __getname(); - -		if (unlikely(!new)) -			goto out; +	if (name) +		/* no need to set ->name_put as the original will cleanup */ +		n->name = name; -		if (len <= (PATH_MAX - sizeof(*new))) { -			new->name = (char *)(new) + sizeof(*new); -			new->separate = false; -		} else if (len <= PATH_MAX) { -			/* this looks odd, but is due to final_putname() */ -			struct filename *new2; - -			new2 = kmalloc(sizeof(*new2), GFP_KERNEL); -			if (unlikely(!new2)) { -				__putname(new); -				goto out; -			} -			new2->name = (char *)new; -			new2->separate = true; -			new = new2; -		} else { -			/* we should never get here, but let's be safe */ -			__putname(new); -			goto out; -		} -		strlcpy((char *)new->name, name->name, len); -		new->uptr = NULL; -		new->aname = n; -		n->name = new; -		n->name_put = true; -	}  out:  	if (parent) {  		n->name_len = n->name ? parent_len(n->name->name) : AUDIT_NAME_FULL;  | 
