stat.c (a52dd971f947893bc7735396c74cfa591f0a7558) | stat.c (8529f613b6945f4b5bd8c1b69e42aa1cc51b2eb6) |
---|---|
1/* 2 * linux/fs/stat.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7#include <linux/export.h> 8#include <linux/mm.h> --- 185 unchanged lines hidden (view full) --- 194# define choose_32_64(a,b) a 195#else 196# define choose_32_64(a,b) b 197#endif 198 199#define valid_dev(x) choose_32_64(old_valid_dev,new_valid_dev)(x) 200#define encode_dev(x) choose_32_64(old_encode_dev,new_encode_dev)(x) 201 | 1/* 2 * linux/fs/stat.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7#include <linux/export.h> 8#include <linux/mm.h> --- 185 unchanged lines hidden (view full) --- 194# define choose_32_64(a,b) a 195#else 196# define choose_32_64(a,b) b 197#endif 198 199#define valid_dev(x) choose_32_64(old_valid_dev,new_valid_dev)(x) 200#define encode_dev(x) choose_32_64(old_encode_dev,new_encode_dev)(x) 201 |
202#ifndef INIT_STRUCT_STAT_PADDING 203# define INIT_STRUCT_STAT_PADDING(st) memset(&st, 0, sizeof(st)) 204#endif 205 |
|
202static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) 203{ 204 struct stat tmp; 205 206 if (!valid_dev(stat->dev) || !valid_dev(stat->rdev)) 207 return -EOVERFLOW; 208#if BITS_PER_LONG == 32 209 if (stat->size > MAX_NON_LFS) 210 return -EOVERFLOW; 211#endif 212 | 206static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) 207{ 208 struct stat tmp; 209 210 if (!valid_dev(stat->dev) || !valid_dev(stat->rdev)) 211 return -EOVERFLOW; 212#if BITS_PER_LONG == 32 213 if (stat->size > MAX_NON_LFS) 214 return -EOVERFLOW; 215#endif 216 |
213 memset(&tmp, 0, sizeof(tmp)); | 217 INIT_STRUCT_STAT_PADDING(tmp); |
214 tmp.st_dev = encode_dev(stat->dev); 215 tmp.st_ino = stat->ino; 216 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino) 217 return -EOVERFLOW; 218 tmp.st_mode = stat->mode; 219 tmp.st_nlink = stat->nlink; 220 if (tmp.st_nlink != stat->nlink) 221 return -EOVERFLOW; --- 96 unchanged lines hidden (view full) --- 318{ 319 return sys_readlinkat(AT_FDCWD, path, buf, bufsiz); 320} 321 322 323/* ---------- LFS-64 ----------- */ 324#ifdef __ARCH_WANT_STAT64 325 | 218 tmp.st_dev = encode_dev(stat->dev); 219 tmp.st_ino = stat->ino; 220 if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino) 221 return -EOVERFLOW; 222 tmp.st_mode = stat->mode; 223 tmp.st_nlink = stat->nlink; 224 if (tmp.st_nlink != stat->nlink) 225 return -EOVERFLOW; --- 96 unchanged lines hidden (view full) --- 322{ 323 return sys_readlinkat(AT_FDCWD, path, buf, bufsiz); 324} 325 326 327/* ---------- LFS-64 ----------- */ 328#ifdef __ARCH_WANT_STAT64 329 |
330#ifndef INIT_STRUCT_STAT64_PADDING 331# define INIT_STRUCT_STAT64_PADDING(st) memset(&st, 0, sizeof(st)) 332#endif 333 |
|
326static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) 327{ 328 struct stat64 tmp; 329 | 334static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) 335{ 336 struct stat64 tmp; 337 |
330 memset(&tmp, 0, sizeof(struct stat64)); | 338 INIT_STRUCT_STAT64_PADDING(tmp); |
331#ifdef CONFIG_MIPS 332 /* mips has weird padding, so we don't get 64 bits there */ 333 if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) 334 return -EOVERFLOW; 335 tmp.st_dev = new_encode_dev(stat->dev); 336 tmp.st_rdev = new_encode_dev(stat->rdev); 337#else 338 tmp.st_dev = huge_encode_dev(stat->dev); --- 129 unchanged lines hidden --- | 339#ifdef CONFIG_MIPS 340 /* mips has weird padding, so we don't get 64 bits there */ 341 if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev)) 342 return -EOVERFLOW; 343 tmp.st_dev = new_encode_dev(stat->dev); 344 tmp.st_rdev = new_encode_dev(stat->rdev); 345#else 346 tmp.st_dev = huge_encode_dev(stat->dev); --- 129 unchanged lines hidden --- |