diff options
Diffstat (limited to 'fs/stat.c')
-rw-r--r-- | fs/stat.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -140,6 +140,8 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta | |||
140 | memset(&tmp, 0, sizeof(struct __old_kernel_stat)); | 140 | memset(&tmp, 0, sizeof(struct __old_kernel_stat)); |
141 | tmp.st_dev = old_encode_dev(stat->dev); | 141 | tmp.st_dev = old_encode_dev(stat->dev); |
142 | tmp.st_ino = stat->ino; | 142 | tmp.st_ino = stat->ino; |
143 | if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino) | ||
144 | return -EOVERFLOW; | ||
143 | tmp.st_mode = stat->mode; | 145 | tmp.st_mode = stat->mode; |
144 | tmp.st_nlink = stat->nlink; | 146 | tmp.st_nlink = stat->nlink; |
145 | if (tmp.st_nlink != stat->nlink) | 147 | if (tmp.st_nlink != stat->nlink) |
@@ -210,6 +212,8 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) | |||
210 | tmp.st_dev = new_encode_dev(stat->dev); | 212 | tmp.st_dev = new_encode_dev(stat->dev); |
211 | #endif | 213 | #endif |
212 | tmp.st_ino = stat->ino; | 214 | tmp.st_ino = stat->ino; |
215 | if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino) | ||
216 | return -EOVERFLOW; | ||
213 | tmp.st_mode = stat->mode; | 217 | tmp.st_mode = stat->mode; |
214 | tmp.st_nlink = stat->nlink; | 218 | tmp.st_nlink = stat->nlink; |
215 | if (tmp.st_nlink != stat->nlink) | 219 | if (tmp.st_nlink != stat->nlink) |
@@ -347,6 +351,8 @@ static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) | |||
347 | tmp.st_rdev = huge_encode_dev(stat->rdev); | 351 | tmp.st_rdev = huge_encode_dev(stat->rdev); |
348 | #endif | 352 | #endif |
349 | tmp.st_ino = stat->ino; | 353 | tmp.st_ino = stat->ino; |
354 | if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino) | ||
355 | return -EOVERFLOW; | ||
350 | #ifdef STAT64_HAS_BROKEN_ST_INO | 356 | #ifdef STAT64_HAS_BROKEN_ST_INO |
351 | tmp.__st_ino = stat->ino; | 357 | tmp.__st_ino = stat->ino; |
352 | #endif | 358 | #endif |