From mboxrd@z Thu Jan 1 00:00:00 1970 From: rtg.canonical@gmail.com Subject: [PATCH v3] fs: namespace: suppress 'may be used uninitialized' warnings Date: Thu, 28 Aug 2014 11:26:03 -0600 Message-ID: <1409246763-5096-1-git-send-email-tim.gardner@canonical.com> References: <20140828143243.GH18016@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Tim Gardner , Alexander Viro To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Return-path: In-Reply-To: <20140828143243.GH18016@ZenIV.linux.org.uk> Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org =46rom: Tim Gardner 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 =E2=80=98SyS_mount=E2=80=99: fs/namespace.c:2720:8: warning: =E2=80=98kernel_dev=E2=80=99 may be use= d uninitialized in this function [-Wmaybe-uninitialized] ret =3D do_mount(kernel_dev, kernel_dir->name, kernel_type, flags, ^ fs/namespace.c:2699:8: note: =E2=80=98kernel_dev=E2=80=99 was declared = here char *kernel_dev; ^ fs/namespace.c:2720:8: warning: =E2=80=98kernel_type=E2=80=99 may be us= ed uninitialized in this function [-Wmaybe-uninitialized] ret =3D do_mount(kernel_dev, kernel_dir->name, kernel_type, flags, ^ fs/namespace.c:2697:8: note: =E2=80=98kernel_type=E2=80=99 was declared= here char *kernel_type; ^ =46ix the warnings by simplifying copy_mount_string() as suggested by A= l Viro. Cc: Alexander Viro Signed-off-by: Tim Gardner --- V1 - use of the uninitialized_var() macro rejected. V2 - assign automatic variables an initial value. V3 - minor surgery to simplify copy_mount_string(), thereby removing al= l doubt as to whether these variables are uninitialized. fs/compat.c | 10 ++++++---- fs/internal.h | 2 +- fs/namespace.c | 26 ++++++++------------------ 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/fs/compat.c b/fs/compat.c index 66d3d3c..6205c24 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -797,8 +797,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, = dev_name, struct filename *dir; int retval; =20 - retval =3D copy_mount_string(type, &kernel_type); - if (retval < 0) + kernel_type =3D copy_mount_string(type); + retval =3D PTR_ERR(kernel_type); + if (IS_ERR(kernel_type)) goto out; =20 dir =3D getname(dir_name); @@ -806,8 +807,9 @@ COMPAT_SYSCALL_DEFINE5(mount, const char __user *, = dev_name, if (IS_ERR(dir)) goto out1; =20 - retval =3D copy_mount_string(dev_name, &kernel_dev); - if (retval < 0) + kernel_dev =3D copy_mount_string(dev_name); + retval =3D PTR_ERR(kernel_dev); + if (IS_ERR(kernel_dev)) goto out2; =20 retval =3D copy_mount_options(data, &data_page); diff --git a/fs/internal.h b/fs/internal.h index e325b4f..bd4ac19 100644 --- a/fs/internal.h +++ b/fs/internal.h @@ -51,7 +51,7 @@ extern int vfs_path_lookup(struct dentry *, struct vf= smount *, * namespace.c */ 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 *); =20 extern struct vfsmount *lookup_mnt(struct path *); extern int finish_automount(struct vfsmount *, struct path *); diff --git a/fs/namespace.c b/fs/namespace.c index a01c773..152c972 100644 --- a/fs/namespace.c +++ b/fs/namespace.c @@ -2390,21 +2390,9 @@ int copy_mount_options(const void __user * data,= unsigned long *where) return 0; } =20 -int copy_mount_string(const void __user *data, char **where) +char *copy_mount_string(const void __user *data) { - char *tmp; - - if (!data) { - *where =3D NULL; - return 0; - } - - tmp =3D strndup_user(data, PAGE_SIZE); - if (IS_ERR(tmp)) - return PTR_ERR(tmp); - - *where =3D tmp; - return 0; + return data ? strndup_user(data, PAGE_SIZE) : NULL; } =20 /* @@ -2670,8 +2658,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, c= har __user *, dir_name, char *kernel_dev; unsigned long data_page; =20 - ret =3D copy_mount_string(type, &kernel_type); - if (ret < 0) + kernel_type =3D copy_mount_string(type); + ret =3D PTR_ERR(kernel_type); + if (IS_ERR(kernel_type)) goto out_type; =20 kernel_dir =3D getname(dir_name); @@ -2680,8 +2669,9 @@ SYSCALL_DEFINE5(mount, char __user *, dev_name, c= har __user *, dir_name, goto out_dir; } =20 - ret =3D copy_mount_string(dev_name, &kernel_dev); - if (ret < 0) + kernel_dev =3D copy_mount_string(dev_name); + ret =3D PTR_ERR(kernel_dev); + if (IS_ERR(kernel_dev)) goto out_dev; =20 ret =3D copy_mount_options(data, &data_page); --=20 2.1.0