X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fstat.c;h=f180a6443289db5922bfd3c121534d727ddc3f1e;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=7816772af77514b98e457e4b18741b9b88032f6e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/stat.c b/fs/stat.c index 7816772af..f180a6443 100644 --- a/fs/stat.c +++ b/fs/stat.c @@ -14,8 +14,10 @@ #include #include #include +#include #include +#include void generic_fillattr(struct inode *inode, struct kstat *stat) { @@ -25,6 +27,7 @@ void generic_fillattr(struct inode *inode, struct kstat *stat) stat->nlink = inode->i_nlink; stat->uid = inode->i_uid; stat->gid = inode->i_gid; + stat->xid = inode->i_xid; stat->rdev = inode->i_rdev; stat->atime = inode->i_atime; stat->mtime = inode->i_mtime; @@ -105,10 +108,7 @@ int vfs_fstat(unsigned int fd, struct kstat *stat) EXPORT_SYMBOL(vfs_fstat); -#if !defined(__alpha__) && !defined(__sparc__) && !defined(__ia64__) \ - && !defined(CONFIG_ARCH_S390) && !defined(__hppa__) \ - && !defined(__arm__) && !defined(CONFIG_V850) && !defined(__powerpc64__) \ - && !defined(__mips__) +#ifdef __ARCH_WANT_OLD_STAT /* * For backward compatibility? Maybe this should be moved @@ -133,6 +133,8 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; + if (tmp.st_nlink != stat->nlink) + return -EOVERFLOW; SET_UID(tmp.st_uid, stat->uid); SET_GID(tmp.st_gid, stat->gid); tmp.st_rdev = old_encode_dev(stat->rdev); @@ -178,7 +180,7 @@ asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * sta return error; } -#endif +#endif /* __ARCH_WANT_OLD_STAT */ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) { @@ -201,6 +203,8 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) tmp.st_ino = stat->ino; tmp.st_mode = stat->mode; tmp.st_nlink = stat->nlink; + if (tmp.st_nlink != stat->nlink) + return -EOVERFLOW; SET_UID(tmp.st_uid, stat->uid); SET_GID(tmp.st_gid, stat->gid); #if BITS_PER_LONG == 32 @@ -284,7 +288,7 @@ asmlinkage long sys_readlink(const char __user * path, char __user * buf, int bu /* ---------- LFS-64 ----------- */ -#if !defined(__ia64__) && !defined(__mips64) && !defined(__x86_64__) && !defined(CONFIG_ARCH_S390X) +#ifdef __ARCH_WANT_STAT64 static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) { @@ -352,7 +356,7 @@ asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) return error; } -#endif /* LFS-64 */ +#endif /* __ARCH_WANT_STAT64 */ void inode_add_bytes(struct inode *inode, loff_t bytes) {