diff options
author | Tim Gardner <tim.gardner@canonical.com> | 2014-08-28 13:26:03 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2014-10-09 02:39:10 -0400 |
commit | b8850d1fa8e2f6653e57daf6d08e58c5f5eb2c85 (patch) | |
tree | 5648df7e01da32afbbf962a8c73b54111fd50f5f | |
parent | 8ba7f6c2faada3ad553518b9febbdce7a988359b (diff) |
fs: namespace: suppress 'may be used uninitialized' warnings
The gcc version 4.9.1 compiler complains Even though it isn't possible for
these variables to not get initialized before they are used.
fs/namespace.c: In function ‘SyS_mount’:
fs/namespace.c:2720:8: warning: ‘kernel_dev’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ret = do_mount(kernel_dev, kernel_dir->name, kernel_type, flags,
^
fs/namespace.c:2699:8: note: ‘kernel_dev’ was declared here
char *kernel_dev;
^
fs/namespace.c:2720:8: warning: ‘kernel_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
ret = do_mount(kernel_dev, kernel_dir->name, kernel_type, flags,
^
fs/namespace.c:2697:8: note: ‘kernel_type’ was declared here
char *kernel_type;
^
Fix the warnings by simplifying copy_mount_string() as suggested by Al Viro.
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/compat.c | 10 | ||||
-rw-r--r-- | fs/internal.h | 2 | ||||
-rw-r--r-- | fs/namespace.c | 26 |
3 files changed, 15 insertions, 23 deletions
diff --git a/fs/compat.c b/fs/compat.c index 66d3d3c6b4b2..6205c247a6e3 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
@@ -797,8 +797,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
797 | struct filename *dir; | 797 | struct filename *dir; |
798 | int retval; | 798 | int retval; |
799 | 799 | ||
800 | retval = copy_mount_string(type, &kernel_type); | 800 | kernel_type = copy_mount_string(type); |
801 | if (retval < 0) | 801 | retval = PTR_ERR(kernel_type); |
802 | if (IS_ERR(kernel_type)) | ||
802 | goto out; | 803 | goto out; |
803 | 804 | ||
804 | dir = getname(dir_name); | 805 | dir = getname(dir_name); |
@@ -806,8 +807,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, | |||
806 | if (IS_ERR(dir)) | 807 | if (IS_ERR(dir)) |
807 | goto out1; | 808 | goto out1; |
808 | 809 | ||
809 | retval = copy_mount_string(dev_name, &kernel_dev); | 810 | kernel_dev = copy_mount_string(dev_name); |
810 | if (retval < 0) | 811 | retval = PTR_ERR(kernel_dev); |
812 | if (IS_ERR(kernel_dev)) | ||
811 | goto out2; | 813 | goto out2; |
812 | 814 | ||
813 | retval = copy_mount_options(data, &data_page); | 815 | retval = copy_mount_options(data, &data_page); |
diff --git a/fs/internal.h b/fs/internal.h index e325b4f9c799..bd4ac19f4d8f 100644 --- a/fs/internal.h +++ b/fs/internal.h | |||
@@ -51,7 +51,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *, | |||
51 | * namespace.c | 51 | * namespace.c |
52 | */ | 52 | */ |
53 | extern int copy_mount_options(const void __user *, unsigned long *); | 53 | extern int copy_mount_options(const void __user *, unsigned long *); |
54 | extern int copy_mount_string(const void __user *, char **); | 54 | extern char *copy_mount_string(const void __user *); |
55 | 55 | ||
56 | extern struct vfsmount *lookup_mnt(struct path *); | 56 | extern struct vfsmount *lookup_mnt(struct path *); |
57 | extern int finish_automount(struct vfsmount *, struct path *); | 57 | extern int finish_automount(struct vfsmount *, struct path *); |
diff --git a/fs/namespace.c b/fs/namespace.c index 00e5b1efa591..abd3abb52616 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
@@ -2514,21 +2514,9 @@ int copy_mount_options(const void __user * data, unsigned long *where) | |||
2514 | return 0; | 2514 | return 0; |
2515 | } | 2515 | } |
2516 | 2516 | ||
2517 | int copy_mount_string(const void __user *data, char **where) | 2517 | char *copy_mount_string(const void __user *data) |
2518 | { | 2518 | { |
2519 | char *tmp; | 2519 | return data ? strndup_user(data, PAGE_SIZE) : NULL; |
2520 | |||
2521 | if (!data) { | ||
2522 | *where = NULL; | ||
2523 | return 0; | ||
2524 | } | ||
2525 | |||
2526 | tmp = strndup_user(data, PAGE_SIZE); | ||
2527 | if (IS_ERR(tmp)) | ||
2528 | return PTR_ERR(tmp); | ||
2529 | |||
2530 | *where = tmp; | ||
2531 | return 0; | ||
2532 | } | 2520 | } |
2533 | 2521 | ||
2534 | /* | 2522 | /* |
@@ -2794,8 +2782,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, | |||
2794 | char *kernel_dev; | 2782 | char *kernel_dev; |
2795 | unsigned long data_page; | 2783 | unsigned long data_page; |
2796 | 2784 | ||
2797 | ret = copy_mount_string(type, &kernel_type); | 2785 | kernel_type = copy_mount_string(type); |
2798 | if (ret < 0) | 2786 | ret = PTR_ERR(kernel_type); |
2787 | if (IS_ERR(kernel_type)) | ||
2799 | goto out_type; | 2788 | goto out_type; |
2800 | 2789 | ||
2801 | kernel_dir = getname(dir_name); | 2790 | kernel_dir = getname(dir_name); |
@@ -2804,8 +2793,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, | |||
2804 | goto out_dir; | 2793 | goto out_dir; |
2805 | } | 2794 | } |
2806 | 2795 | ||
2807 | ret = copy_mount_string(dev_name, &kernel_dev); | 2796 | kernel_dev = copy_mount_string(dev_name); |
2808 | if (ret < 0) | 2797 | ret = PTR_ERR(kernel_dev); |
2798 | if (IS_ERR(kernel_dev)) | ||
2809 | goto out_dev; | 2799 | goto out_dev; |
2810 | 2800 | ||
2811 | ret = copy_mount_options(data, &data_page); | 2801 | ret = copy_mount_options(data, &data_page); |