Commit 85c9fe8f authored by Kevin Winchester's avatar Kevin Winchester Committed by Linus Torvalds

vfs: fix warning: 'dirent' is used uninitialized in this function

Using:

	gcc (GCC) 4.5.0 20100610 (prerelease)

The following warnings appear:

	fs/readdir.c: In function `filldir64':
	fs/readdir.c:240:15: warning: `dirent' is used uninitialized in this function
	fs/readdir.c: In function `filldir':
	fs/readdir.c:155:15: warning: `dirent' is used uninitialized in this function
	fs/compat.c: In function `compat_filldir64':
	fs/compat.c:1071:11: warning: `dirent' is used uninitialized in this function
	fs/compat.c: In function `compat_filldir':
	fs/compat.c:984:15: warning: `dirent' is used uninitialized in this function

The warnings are related to the use of the NAME_OFFSET() macro.  Luckily,
it appears as though the standard offsetof() macro is what is being
implemented by NAME_OFFSET(), thus we can fix the warning and use a more
standard code construct at the same time.
Signed-off-by: default avatarKevin Winchester <kjwinchester@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d89b1945
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/stddef.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/compat.h> #include <linux/compat.h>
...@@ -891,8 +892,6 @@ asmlinkage long compat_sys_mount(char __user * dev_name, char __user * dir_name, ...@@ -891,8 +892,6 @@ asmlinkage long compat_sys_mount(char __user * dev_name, char __user * dir_name,
return retval; return retval;
} }
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
struct compat_old_linux_dirent { struct compat_old_linux_dirent {
compat_ulong_t d_ino; compat_ulong_t d_ino;
compat_ulong_t d_offset; compat_ulong_t d_offset;
...@@ -981,7 +980,8 @@ static int compat_filldir(void *__buf, const char *name, int namlen, ...@@ -981,7 +980,8 @@ static int compat_filldir(void *__buf, const char *name, int namlen,
struct compat_linux_dirent __user * dirent; struct compat_linux_dirent __user * dirent;
struct compat_getdents_callback *buf = __buf; struct compat_getdents_callback *buf = __buf;
compat_ulong_t d_ino; compat_ulong_t d_ino;
int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 2, sizeof(compat_long_t)); int reclen = ALIGN(offsetof(struct compat_linux_dirent, d_name) +
namlen + 2, sizeof(compat_long_t));
buf->error = -EINVAL; /* only used if we fail.. */ buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count) if (reclen > buf->count)
...@@ -1068,8 +1068,8 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t ...@@ -1068,8 +1068,8 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t
{ {
struct linux_dirent64 __user *dirent; struct linux_dirent64 __user *dirent;
struct compat_getdents_callback64 *buf = __buf; struct compat_getdents_callback64 *buf = __buf;
int jj = NAME_OFFSET(dirent); int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
int reclen = ALIGN(jj + namlen + 1, sizeof(u64)); sizeof(u64));
u64 off; u64 off;
buf->error = -EINVAL; /* only used if we fail.. */ buf->error = -EINVAL; /* only used if we fail.. */
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* Copyright (C) 1995 Linus Torvalds * Copyright (C) 1995 Linus Torvalds
*/ */
#include <linux/stddef.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/time.h> #include <linux/time.h>
...@@ -54,7 +55,6 @@ EXPORT_SYMBOL(vfs_readdir); ...@@ -54,7 +55,6 @@ EXPORT_SYMBOL(vfs_readdir);
* anyway. Thus the special "fillonedir()" function for that * anyway. Thus the special "fillonedir()" function for that
* case (the low-level handlers don't need to care about this). * case (the low-level handlers don't need to care about this).
*/ */
#define NAME_OFFSET(de) ((int) ((de)->d_name - (char __user *) (de)))
#ifdef __ARCH_WANT_OLD_READDIR #ifdef __ARCH_WANT_OLD_READDIR
...@@ -152,7 +152,8 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset, ...@@ -152,7 +152,8 @@ static int filldir(void * __buf, const char * name, int namlen, loff_t offset,
struct linux_dirent __user * dirent; struct linux_dirent __user * dirent;
struct getdents_callback * buf = (struct getdents_callback *) __buf; struct getdents_callback * buf = (struct getdents_callback *) __buf;
unsigned long d_ino; unsigned long d_ino;
int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 2, sizeof(long)); int reclen = ALIGN(offsetof(struct linux_dirent, d_name) + namlen + 2,
sizeof(long));
buf->error = -EINVAL; /* only used if we fail.. */ buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count) if (reclen > buf->count)
...@@ -237,7 +238,8 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset, ...@@ -237,7 +238,8 @@ static int filldir64(void * __buf, const char * name, int namlen, loff_t offset,
{ {
struct linux_dirent64 __user *dirent; struct linux_dirent64 __user *dirent;
struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf; struct getdents_callback64 * buf = (struct getdents_callback64 *) __buf;
int reclen = ALIGN(NAME_OFFSET(dirent) + namlen + 1, sizeof(u64)); int reclen = ALIGN(offsetof(struct linux_dirent64, d_name) + namlen + 1,
sizeof(u64));
buf->error = -EINVAL; /* only used if we fail.. */ buf->error = -EINVAL; /* only used if we fail.. */
if (reclen > buf->count) if (reclen > buf->count)
......
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