diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index c46e3d48e410..e15e1489aef5 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -357,11 +357,16 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned | |||
357 | 357 | ||
358 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) | 358 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) |
359 | { | 359 | { |
360 | compat_ino_t ino; | ||
360 | int err; | 361 | int err; |
361 | 362 | ||
362 | if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) | 363 | if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) |
363 | return -EOVERFLOW; | 364 | return -EOVERFLOW; |
364 | 365 | ||
366 | ino = stat->ino; | ||
367 | if (sizeof(ino) < sizeof(stat->ino) && ino != stat->ino) | ||
368 | return -EOVERFLOW; | ||
369 | |||
365 | err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); | 370 | err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); |
366 | err |= put_user(stat->ino, &statbuf->st_ino); | 371 | err |= put_user(stat->ino, &statbuf->st_ino); |
367 | err |= put_user(stat->mode, &statbuf->st_mode); | 372 | err |= put_user(stat->mode, &statbuf->st_mode); |