Commit b8850d1f authored by Tim Gardner's avatar Tim Gardner Committed by Al Viro

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: default avatarTim Gardner <tim.gardner@canonical.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 8ba7f6c2
...@@ -797,8 +797,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, ...@@ -797,8 +797,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
struct filename *dir; struct filename *dir;
int retval; int retval;
retval = copy_mount_string(type, &kernel_type); kernel_type = copy_mount_string(type);
if (retval < 0) retval = PTR_ERR(kernel_type);
if (IS_ERR(kernel_type))
goto out; goto out;
dir = getname(dir_name); dir = getname(dir_name);
...@@ -806,8 +807,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name, ...@@ -806,8 +807,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, dev_name,
if (IS_ERR(dir)) if (IS_ERR(dir))
goto out1; goto out1;
retval = copy_mount_string(dev_name, &kernel_dev); kernel_dev = copy_mount_string(dev_name);
if (retval < 0) retval = PTR_ERR(kernel_dev);
if (IS_ERR(kernel_dev))
goto out2; goto out2;
retval = copy_mount_options(data, &data_page); retval = copy_mount_options(data, &data_page);
......
...@@ -51,7 +51,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *, ...@@ -51,7 +51,7 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
* namespace.c * namespace.c
*/ */
extern int copy_mount_options(const void __user *, unsigned long *); extern int copy_mount_options(const void __user *, unsigned long *);
extern int copy_mount_string(const void __user *, char **); extern char *copy_mount_string(const void __user *);
extern struct vfsmount *lookup_mnt(struct path *); extern struct vfsmount *lookup_mnt(struct path *);
extern int finish_automount(struct vfsmount *, struct path *); extern int finish_automount(struct vfsmount *, struct path *);
......
...@@ -2514,21 +2514,9 @@ int copy_mount_options(const void __user * data, unsigned long *where) ...@@ -2514,21 +2514,9 @@ int copy_mount_options(const void __user * data, unsigned long *where)
return 0; return 0;
} }
int copy_mount_string(const void __user *data, char **where) char *copy_mount_string(const void __user *data)
{ {
char *tmp; return data ? strndup_user(data, PAGE_SIZE) : NULL;
if (!data) {
*where = NULL;
return 0;
}
tmp = strndup_user(data, PAGE_SIZE);
if (IS_ERR(tmp))
return PTR_ERR(tmp);
*where = tmp;
return 0;
} }
/* /*
...@@ -2794,8 +2782,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, ...@@ -2794,8 +2782,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
char *kernel_dev; char *kernel_dev;
unsigned long data_page; unsigned long data_page;
ret = copy_mount_string(type, &kernel_type); kernel_type = copy_mount_string(type);
if (ret < 0) ret = PTR_ERR(kernel_type);
if (IS_ERR(kernel_type))
goto out_type; goto out_type;
kernel_dir = getname(dir_name); kernel_dir = getname(dir_name);
...@@ -2804,8 +2793,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, ...@@ -2804,8 +2793,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name,
goto out_dir; goto out_dir;
} }
ret = copy_mount_string(dev_name, &kernel_dev); kernel_dev = copy_mount_string(dev_name);
if (ret < 0) ret = PTR_ERR(kernel_dev);
if (IS_ERR(kernel_dev))
goto out_dev; goto out_dev;
ret = copy_mount_options(data, &data_page); ret = copy_mount_options(data, &data_page);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment