fs: create proper filename objects using getname_kernel()
authorPaul Moore <pmoore@redhat.com>
Thu, 22 Jan 2015 05:00:03 +0000 (00:00 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 23 Jan 2015 05:22:20 +0000 (00:22 -0500)
commit5168910413830435fa3f0a593933a83721ec8bad
tree72c23b2a0c98aad8d04670cb32903253e76c41ce
parent08518549722f0c992a9e4be71a0777f37147e9d2
fs: create proper filename objects using getname_kernel()

There are several areas in the kernel that create temporary filename
objects using the following pattern:

int func(const char *name)
{
struct filename *file = { .name = name };
...
return 0;
}

... which for the most part works okay, but it causes havoc within the
audit subsystem as the filename object does not persist beyond the
lifetime of the function.  This patch converts all of these temporary
filename objects into proper filename objects using getname_kernel()
and putname() which ensure that the filename object persists until the
audit subsystem is finished with it.

Also, a special thanks to Al Viro, Guenter Roeck, and Sabrina Dubroca
for helping resolve a difficult kernel panic on boot related to a
use-after-free problem in kern_path_create(); the thread can be seen
at the link below:

 * https://lkml.org/lkml/2015/1/20/710

This patch includes code that was either based on, or directly written
by Al in the above thread.

CC: viro@zeniv.linux.org.uk
CC: linux@roeck-us.net
CC: sd@queasysnail.net
CC: linux-fsdevel@vger.kernel.org
Signed-off-by: Paul Moore <pmoore@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/exec.c
fs/namei.c
fs/open.c