s390/compat: fix compat_sys_statfs() memory corruption
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Sat, 20 Apr 2013 11:01:19 +0000 (13:01 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Tue, 23 Apr 2013 08:18:09 +0000 (10:18 +0200)
The f_spare field within struct compat_statfs is four bytes larger
than within the native 31 bit struct statfs.
compat_sys_statfs() clears the f_spare field in user space which
means that in compat mode four bytes that are behind the user space
supplied struct compat_statfs will be corrupted (zeroed).

According to Thomas Gleixner's Linux 2.6 history tree this bug is
present since v2.5.74 87880da124 "[PATCH] s390: 31 bit compat.".
So it get's fixed shortly before its 10th anniversary. Tough luck.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/compat.h

index f8c6df6cd1f02c93910de5fba976b1c4161879dd..d967ac8d55d0359cd90c3b053b244ef601ddcf04 100644 (file)
@@ -135,7 +135,7 @@ struct compat_statfs {
        s32             f_namelen;
        s32             f_frsize;
        s32             f_flags;
-       s32             f_spare[5];
+       s32             f_spare[4];
 };
 
 #define COMPAT_RLIM_OLD_INFINITY       0x7fffffff