diff options
Diffstat (limited to 'fs/compat.c')
-rw-r--r-- | fs/compat.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fs/compat.c b/fs/compat.c index 6fd272d455e4..a71936a3f4cb 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -792,7 +792,7 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
792 | const void __user *, data) | 792 | const void __user *, data) |
793 | { | 793 | { |
794 | char *kernel_type; | 794 | char *kernel_type; |
795 | unsigned long data_page; | 795 | void *options; |
796 | char *kernel_dev; | 796 | char *kernel_dev; |
797 | int retval; | 797 | int retval; |
798 | 798 | ||
@@ -806,26 +806,25 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
806 | if (IS_ERR(kernel_dev)) | 806 | if (IS_ERR(kernel_dev)) |
807 | goto out1; | 807 | goto out1; |
808 | 808 | ||
809 | retval = copy_mount_options(data, &data_page); | 809 | options = copy_mount_options(data); |
810 | if (retval < 0) | 810 | retval = PTR_ERR(options); |
811 | if (IS_ERR(options)) | ||
811 | goto out2; | 812 | goto out2; |
812 | 813 | ||
813 | retval = -EINVAL; | 814 | if (kernel_type && options) { |
814 | |||
815 | if (kernel_type && data_page) { | ||
816 | if (!strcmp(kernel_type, NCPFS_NAME)) { | 815 | if (!strcmp(kernel_type, NCPFS_NAME)) { |
817 | do_ncp_super_data_conv((void *)data_page); | 816 | do_ncp_super_data_conv(options); |
818 | } else if (!strcmp(kernel_type, NFS4_NAME)) { | 817 | } else if (!strcmp(kernel_type, NFS4_NAME)) { |
819 | if (do_nfs4_super_data_conv((void *) data_page)) | 818 | retval = -EINVAL; |
819 | if (do_nfs4_super_data_conv(options)) | ||
820 | goto out3; | 820 | goto out3; |
821 | } | 821 | } |
822 | } | 822 | } |
823 | 823 | ||
824 | retval = do_mount(kernel_dev, dir_name, kernel_type, | 824 | retval = do_mount(kernel_dev, dir_name, kernel_type, flags, options); |
825 | flags, (void*)data_page); | ||
826 | 825 | ||
827 | out3: | 826 | out3: |
828 | free_page(data_page); | 827 | kfree(options); |
829 | out2: | 828 | out2: |
830 | kfree(kernel_dev); | 829 | kfree(kernel_dev); |
831 | out1: | 830 | out1: |