diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2011-10-17 16:40:02 -0400 |
---|---|---|
committer | root <root@serles.lst.de> | 2011-10-28 08:58:53 -0400 |
commit | 1448c721e4fa2faf742029a0403b4b787fccb7fa (patch) | |
tree | f79332dccc85550b4c16510840850e11115cfff0 /arch | |
parent | a877ee03ac010ded434b77f7831f43cbb1fcc60f (diff) |
compat: sync compat_stats with statfs.
This was found by inspection while tracking a similar
bug in compat_statfs64, that has been fixed in mainline
since decemeber.
- This fixes a bug where not all of the f_spare fields
were cleared on mips and s390.
- Add the f_flags field to struct compat_statfs
- Copy f_flags to userspace in case someone cares.
- Use __clear_user to copy the f_spare field to userspace
to ensure that all of the elements of f_spare are cleared.
On some architectures f_spare is has 5 ints and on some
architectures f_spare only has 4 ints. Which makes
the previous technique of clearing each int individually
broken.
I don't expect anyone actually uses the old statfs system
call anymore but if they do let them benefit from having
the compat and the native version working the same.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/include/asm/compat.h | 3 | ||||
-rw-r--r-- | arch/parisc/include/asm/compat.h | 3 | ||||
-rw-r--r-- | arch/powerpc/include/asm/compat.h | 3 | ||||
-rw-r--r-- | arch/s390/include/asm/compat.h | 3 | ||||
-rw-r--r-- | arch/sparc/include/asm/compat.h | 3 | ||||
-rw-r--r-- | arch/x86/include/asm/compat.h | 3 |
6 files changed, 12 insertions, 6 deletions
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index dbc51065df5b..b77df0366ee6 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h | |||
@@ -111,7 +111,8 @@ struct compat_statfs { | |||
111 | int f_bavail; | 111 | int f_bavail; |
112 | compat_fsid_t f_fsid; | 112 | compat_fsid_t f_fsid; |
113 | int f_namelen; | 113 | int f_namelen; |
114 | int f_spare[6]; | 114 | int f_flags; |
115 | int f_spare[5]; | ||
115 | }; | 116 | }; |
116 | 117 | ||
117 | #define COMPAT_RLIM_INFINITY 0x7fffffffUL | 118 | #define COMPAT_RLIM_INFINITY 0x7fffffffUL |
diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h index efa0b60c63fe..760f331d4fa3 100644 --- a/arch/parisc/include/asm/compat.h +++ b/arch/parisc/include/asm/compat.h | |||
@@ -105,7 +105,8 @@ struct compat_statfs { | |||
105 | __kernel_fsid_t f_fsid; | 105 | __kernel_fsid_t f_fsid; |
106 | s32 f_namelen; | 106 | s32 f_namelen; |
107 | s32 f_frsize; | 107 | s32 f_frsize; |
108 | s32 f_spare[5]; | 108 | s32 f_flags; |
109 | s32 f_spare[4]; | ||
109 | }; | 110 | }; |
110 | 111 | ||
111 | struct compat_sigcontext { | 112 | struct compat_sigcontext { |
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h index 91010e8f8479..88e602f6430d 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h | |||
@@ -100,7 +100,8 @@ struct compat_statfs { | |||
100 | compat_fsid_t f_fsid; | 100 | compat_fsid_t f_fsid; |
101 | int f_namelen; /* SunOS ignores this field. */ | 101 | int f_namelen; /* SunOS ignores this field. */ |
102 | int f_frsize; | 102 | int f_frsize; |
103 | int f_spare[5]; | 103 | int f_flags; |
104 | int f_spare[4]; | ||
104 | }; | 105 | }; |
105 | 106 | ||
106 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff | 107 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff |
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h index da359ca6fe55..cdb9b78f6c08 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h | |||
@@ -131,7 +131,8 @@ struct compat_statfs { | |||
131 | compat_fsid_t f_fsid; | 131 | compat_fsid_t f_fsid; |
132 | s32 f_namelen; | 132 | s32 f_namelen; |
133 | s32 f_frsize; | 133 | s32 f_frsize; |
134 | s32 f_spare[6]; | 134 | s32 f_flags; |
135 | s32 f_spare[5]; | ||
135 | }; | 136 | }; |
136 | 137 | ||
137 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff | 138 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff |
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index 6f57325bb883..b8be20d42a0a 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h | |||
@@ -134,7 +134,8 @@ struct compat_statfs { | |||
134 | compat_fsid_t f_fsid; | 134 | compat_fsid_t f_fsid; |
135 | int f_namelen; /* SunOS ignores this field. */ | 135 | int f_namelen; /* SunOS ignores this field. */ |
136 | int f_frsize; | 136 | int f_frsize; |
137 | int f_spare[5]; | 137 | int f_flags; |
138 | int f_spare[4]; | ||
138 | }; | 139 | }; |
139 | 140 | ||
140 | #define COMPAT_RLIM_INFINITY 0x7fffffff | 141 | #define COMPAT_RLIM_INFINITY 0x7fffffff |
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h index 1d9cd27c2920..30d737ef2a42 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h | |||
@@ -108,7 +108,8 @@ struct compat_statfs { | |||
108 | compat_fsid_t f_fsid; | 108 | compat_fsid_t f_fsid; |
109 | int f_namelen; /* SunOS ignores this field. */ | 109 | int f_namelen; /* SunOS ignores this field. */ |
110 | int f_frsize; | 110 | int f_frsize; |
111 | int f_spare[5]; | 111 | int f_flags; |
112 | int f_spare[4]; | ||
112 | }; | 113 | }; |
113 | 114 | ||
114 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff | 115 | #define COMPAT_RLIM_OLD_INFINITY 0x7fffffff |