diff options
Diffstat (limited to 'arch/sparc64/kernel/sys_sparc32.c')
-rw-r--r-- | arch/sparc64/kernel/sys_sparc32.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 69444f266e2d..dbc6d1a3be1f 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c | |||
@@ -337,12 +337,17 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned | |||
337 | 337 | ||
338 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) | 338 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) |
339 | { | 339 | { |
340 | compat_ino_t ino; | ||
340 | int err; | 341 | int err; |
341 | 342 | ||
342 | if (stat->size > MAX_NON_LFS || !old_valid_dev(stat->dev) || | 343 | if (stat->size > MAX_NON_LFS || !old_valid_dev(stat->dev) || |
343 | !old_valid_dev(stat->rdev)) | 344 | !old_valid_dev(stat->rdev)) |
344 | return -EOVERFLOW; | 345 | return -EOVERFLOW; |
345 | 346 | ||
347 | ino = stat->ino; | ||
348 | if (sizeof(ino) < sizeof(stat->ino) && ino != stat->ino) | ||
349 | return -EOVERFLOW; | ||
350 | |||
346 | err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); | 351 | err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); |
347 | err |= put_user(stat->ino, &statbuf->st_ino); | 352 | err |= put_user(stat->ino, &statbuf->st_ino); |
348 | err |= put_user(stat->mode, &statbuf->st_mode); | 353 | err |= put_user(stat->mode, &statbuf->st_mode); |