diff options
author | Seunghun Lee <waydi1@gmail.com> | 2014-09-14 09:15:10 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2014-10-09 02:39:16 -0400 |
commit | 5e6123f3477e4260fb14392f0a88f1a842fa4d42 (patch) | |
tree | 66cf4572317d0e634f169cbdc702e773fe0e4b5c /fs/compat.c | |
parent | 4d93bc3e81736ce55c79d9cae743bab4f89b4f9c (diff) |
vfs: move getname() from callers to do_mount()
It would make more sense to pass char __user * instead of
char * in callers of do_mount() and do getname() inside do_mount().
Suggested-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Seunghun Lee <waydi1@gmail.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/compat.c')
-rw-r--r-- | fs/compat.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/fs/compat.c b/fs/compat.c index 6205c247a6e3..b13df99f3534 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -794,7 +794,6 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
794 | char *kernel_type; | 794 | char *kernel_type; |
795 | unsigned long data_page; | 795 | unsigned long data_page; |
796 | char *kernel_dev; | 796 | char *kernel_dev; |
797 | struct filename *dir; | ||
798 | int retval; | 797 | int retval; |
799 | 798 | ||
800 | kernel_type = copy_mount_string(type); | 799 | kernel_type = copy_mount_string(type); |
@@ -802,19 +801,14 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
802 | if (IS_ERR(kernel_type)) | 801 | if (IS_ERR(kernel_type)) |
803 | goto out; | 802 | goto out; |
804 | 803 | ||
805 | dir = getname(dir_name); | ||
806 | retval = PTR_ERR(dir); | ||
807 | if (IS_ERR(dir)) | ||
808 | goto out1; | ||
809 | |||
810 | kernel_dev = copy_mount_string(dev_name); | 804 | kernel_dev = copy_mount_string(dev_name); |
811 | retval = PTR_ERR(kernel_dev); | 805 | retval = PTR_ERR(kernel_dev); |
812 | if (IS_ERR(kernel_dev)) | 806 | if (IS_ERR(kernel_dev)) |
813 | goto out2; | 807 | goto out1; |
814 | 808 | ||
815 | retval = copy_mount_options(data, &data_page); | 809 | retval = copy_mount_options(data, &data_page); |
816 | if (retval < 0) | 810 | if (retval < 0) |
817 | goto out3; | 811 | goto out2; |
818 | 812 | ||
819 | retval = -EINVAL; | 813 | retval = -EINVAL; |
820 | 814 | ||
@@ -823,19 +817,17 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
823 | do_ncp_super_data_conv((void *)data_page); | 817 | do_ncp_super_data_conv((void *)data_page); |
824 | } else if (!strcmp(kernel_type, NFS4_NAME)) { | 818 | } else if (!strcmp(kernel_type, NFS4_NAME)) { |
825 | if (do_nfs4_super_data_conv((void *) data_page)) | 819 | if (do_nfs4_super_data_conv((void *) data_page)) |
826 | goto out4; | 820 | goto out3; |
827 | } | 821 | } |
828 | } | 822 | } |
829 | 823 | ||
830 | retval = do_mount(kernel_dev, dir->name, kernel_type, | 824 | retval = do_mount(kernel_dev, dir_name, kernel_type, |
831 | flags, (void*)data_page); | 825 | flags, (void*)data_page); |
832 | 826 | ||
833 | out4: | ||
834 | free_page(data_page); | ||
835 | out3: | 827 | out3: |
836 | kfree(kernel_dev); | 828 | free_page(data_page); |
837 | out2: | 829 | out2: |
838 | putname(dir); | 830 | kfree(kernel_dev); |
839 | out1: | 831 | out1: |
840 | kfree(kernel_type); | 832 | kfree(kernel_type); |
841 | out: | 833 | out: |