aboutsummaryrefslogtreecommitdiffstats
path: root/fs/open.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@redhat.com>2012-10-10 15:25:28 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-10-12 20:14:55 -0400
commit91a27b2a756784714e924e5e854b919273082d26 (patch)
tree3913246b7d6e62703ec915f481e3a7159393f0f0 /fs/open.c
parent8e377d15078a501c4da98471f56396343c407d92 (diff)
vfs: define struct filename and have getname() return it
getname() is intended to copy pathname strings from userspace into a kernel buffer. The result is just a string in kernel space. It would however be quite helpful to be able to attach some ancillary info to the string. For instance, we could attach some audit-related info to reduce the amount of audit-related processing needed. When auditing is enabled, we could also call getname() on the string more than once and not need to recopy it from userspace. This patchset converts the getname()/putname() interfaces to return a struct instead of a string. For now, the struct just tracks the string in kernel space and the original userland pointer for it. Later, we'll add other information to the struct as it becomes convenient. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/open.c')
-rw-r--r--fs/open.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/open.c b/fs/open.c
index a015437e1535..81dd92ac10ff 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -895,13 +895,13 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
895{ 895{
896 struct open_flags op; 896 struct open_flags op;
897 int lookup = build_open_flags(flags, mode, &op); 897 int lookup = build_open_flags(flags, mode, &op);
898 char *tmp = getname(filename); 898 struct filename *tmp = getname(filename);
899 int fd = PTR_ERR(tmp); 899 int fd = PTR_ERR(tmp);
900 900
901 if (!IS_ERR(tmp)) { 901 if (!IS_ERR(tmp)) {
902 fd = get_unused_fd_flags(flags); 902 fd = get_unused_fd_flags(flags);
903 if (fd >= 0) { 903 if (fd >= 0) {
904 struct file *f = do_filp_open(dfd, tmp, &op, lookup); 904 struct file *f = do_filp_open(dfd, tmp->name, &op, lookup);
905 if (IS_ERR(f)) { 905 if (IS_ERR(f)) {
906 put_unused_fd(fd); 906 put_unused_fd(fd);
907 fd = PTR_ERR(f); 907 fd = PTR_ERR(f);