diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2014-01-22 08:49:30 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-02-21 02:50:13 -0500 |
commit | cfa785e623577cdad2aa721acb23bd3a95eced9a (patch) | |
tree | 30fcb9b2f2153f08f66dd27b0a51a64b657b7717 /arch/s390 | |
parent | 137a14f434705a366cc94b2b32f2488c975863ad (diff) |
s390/uaccess: normalize order of parameters of indirect uaccess function calls
For some unknown reason the indirect uaccess functions on s390 implement a
different parameter order than what is usual.
e.g.:
unsigned long copy_to_user(void *to, const void *from, unsigned long n);
vs.
size_t (*copy_to_user)(size_t n, void __user * to, const void *from);
Let's get rid of this confusing parameter reordering.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/asm/uaccess.h | 54 | ||||
-rw-r--r-- | arch/s390/lib/uaccess_mvcos.c | 20 | ||||
-rw-r--r-- | arch/s390/lib/uaccess_pt.c | 34 |
3 files changed, 54 insertions, 54 deletions
diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h index 79330af9a5f8..73199636ba98 100644 --- a/arch/s390/include/asm/uaccess.h +++ b/arch/s390/include/asm/uaccess.h | |||
@@ -93,12 +93,12 @@ static inline unsigned long extable_fixup(const struct exception_table_entry *x) | |||
93 | #define ARCH_HAS_SEARCH_EXTABLE | 93 | #define ARCH_HAS_SEARCH_EXTABLE |
94 | 94 | ||
95 | struct uaccess_ops { | 95 | struct uaccess_ops { |
96 | size_t (*copy_from_user)(size_t, const void __user *, void *); | 96 | size_t (*copy_from_user)(void *, const void __user *, size_t); |
97 | size_t (*copy_to_user)(size_t, void __user *, const void *); | 97 | size_t (*copy_to_user)(void __user *, const void *, size_t); |
98 | size_t (*copy_in_user)(size_t, void __user *, const void __user *); | 98 | size_t (*copy_in_user)(void __user *, const void __user *, size_t); |
99 | size_t (*clear_user)(size_t, void __user *); | 99 | size_t (*clear_user)(void __user *, size_t); |
100 | size_t (*strnlen_user)(size_t, const char __user *); | 100 | size_t (*strnlen_user)(const char __user *, size_t); |
101 | size_t (*strncpy_from_user)(size_t, const char __user *, char *); | 101 | size_t (*strncpy_from_user)(char *, const char __user *, size_t); |
102 | int (*futex_atomic_op)(int op, u32 __user *, int oparg, int *old); | 102 | int (*futex_atomic_op)(int op, u32 __user *, int oparg, int *old); |
103 | int (*futex_atomic_cmpxchg)(u32 *, u32 __user *, u32 old, u32 new); | 103 | int (*futex_atomic_cmpxchg)(u32 *, u32 __user *, u32 old, u32 new); |
104 | }; | 104 | }; |
@@ -109,15 +109,15 @@ extern struct uaccess_ops uaccess_pt; | |||
109 | 109 | ||
110 | extern int __handle_fault(unsigned long, unsigned long, int); | 110 | extern int __handle_fault(unsigned long, unsigned long, int); |
111 | 111 | ||
112 | static inline int __put_user_fn(size_t size, void __user *ptr, void *x) | 112 | static inline int __put_user_fn(void *x, void __user *ptr, size_t size) |
113 | { | 113 | { |
114 | size = uaccess.copy_to_user(size, ptr, x); | 114 | size = uaccess.copy_to_user(ptr, x, size); |
115 | return size ? -EFAULT : size; | 115 | return size ? -EFAULT : size; |
116 | } | 116 | } |
117 | 117 | ||
118 | static inline int __get_user_fn(size_t size, const void __user *ptr, void *x) | 118 | static inline int __get_user_fn(void *x, const void __user *ptr, size_t size) |
119 | { | 119 | { |
120 | size = uaccess.copy_from_user(size, ptr, x); | 120 | size = uaccess.copy_from_user(x, ptr, size); |
121 | return size ? -EFAULT : size; | 121 | return size ? -EFAULT : size; |
122 | } | 122 | } |
123 | 123 | ||
@@ -135,8 +135,8 @@ static inline int __get_user_fn(size_t size, const void __user *ptr, void *x) | |||
135 | case 2: \ | 135 | case 2: \ |
136 | case 4: \ | 136 | case 4: \ |
137 | case 8: \ | 137 | case 8: \ |
138 | __pu_err = __put_user_fn(sizeof (*(ptr)), \ | 138 | __pu_err = __put_user_fn(&__x, ptr, \ |
139 | ptr, &__x); \ | 139 | sizeof(*(ptr))); \ |
140 | break; \ | 140 | break; \ |
141 | default: \ | 141 | default: \ |
142 | __put_user_bad(); \ | 142 | __put_user_bad(); \ |
@@ -161,29 +161,29 @@ extern int __put_user_bad(void) __attribute__((noreturn)); | |||
161 | switch (sizeof(*(ptr))) { \ | 161 | switch (sizeof(*(ptr))) { \ |
162 | case 1: { \ | 162 | case 1: { \ |
163 | unsigned char __x; \ | 163 | unsigned char __x; \ |
164 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | 164 | __gu_err = __get_user_fn(&__x, ptr, \ |
165 | ptr, &__x); \ | 165 | sizeof(*(ptr))); \ |
166 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | 166 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ |
167 | break; \ | 167 | break; \ |
168 | }; \ | 168 | }; \ |
169 | case 2: { \ | 169 | case 2: { \ |
170 | unsigned short __x; \ | 170 | unsigned short __x; \ |
171 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | 171 | __gu_err = __get_user_fn(&__x, ptr, \ |
172 | ptr, &__x); \ | 172 | sizeof(*(ptr))); \ |
173 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | 173 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ |
174 | break; \ | 174 | break; \ |
175 | }; \ | 175 | }; \ |
176 | case 4: { \ | 176 | case 4: { \ |
177 | unsigned int __x; \ | 177 | unsigned int __x; \ |
178 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | 178 | __gu_err = __get_user_fn(&__x, ptr, \ |
179 | ptr, &__x); \ | 179 | sizeof(*(ptr))); \ |
180 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | 180 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ |
181 | break; \ | 181 | break; \ |
182 | }; \ | 182 | }; \ |
183 | case 8: { \ | 183 | case 8: { \ |
184 | unsigned long long __x; \ | 184 | unsigned long long __x; \ |
185 | __gu_err = __get_user_fn(sizeof (*(ptr)), \ | 185 | __gu_err = __get_user_fn(&__x, ptr, \ |
186 | ptr, &__x); \ | 186 | sizeof(*(ptr))); \ |
187 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ | 187 | (x) = *(__force __typeof__(*(ptr)) *) &__x; \ |
188 | break; \ | 188 | break; \ |
189 | }; \ | 189 | }; \ |
@@ -222,7 +222,7 @@ extern int __get_user_bad(void) __attribute__((noreturn)); | |||
222 | static inline unsigned long __must_check | 222 | static inline unsigned long __must_check |
223 | __copy_to_user(void __user *to, const void *from, unsigned long n) | 223 | __copy_to_user(void __user *to, const void *from, unsigned long n) |
224 | { | 224 | { |
225 | return uaccess.copy_to_user(n, to, from); | 225 | return uaccess.copy_to_user(to, from, n); |
226 | } | 226 | } |
227 | 227 | ||
228 | #define __copy_to_user_inatomic __copy_to_user | 228 | #define __copy_to_user_inatomic __copy_to_user |
@@ -268,7 +268,7 @@ copy_to_user(void __user *to, const void *from, unsigned long n) | |||
268 | static inline unsigned long __must_check | 268 | static inline unsigned long __must_check |
269 | __copy_from_user(void *to, const void __user *from, unsigned long n) | 269 | __copy_from_user(void *to, const void __user *from, unsigned long n) |
270 | { | 270 | { |
271 | return uaccess.copy_from_user(n, from, to); | 271 | return uaccess.copy_from_user(to, from, n); |
272 | } | 272 | } |
273 | 273 | ||
274 | extern void copy_from_user_overflow(void) | 274 | extern void copy_from_user_overflow(void) |
@@ -309,7 +309,7 @@ copy_from_user(void *to, const void __user *from, unsigned long n) | |||
309 | static inline unsigned long __must_check | 309 | static inline unsigned long __must_check |
310 | __copy_in_user(void __user *to, const void __user *from, unsigned long n) | 310 | __copy_in_user(void __user *to, const void __user *from, unsigned long n) |
311 | { | 311 | { |
312 | return uaccess.copy_in_user(n, to, from); | 312 | return uaccess.copy_in_user(to, from, n); |
313 | } | 313 | } |
314 | 314 | ||
315 | static inline unsigned long __must_check | 315 | static inline unsigned long __must_check |
@@ -326,14 +326,14 @@ static inline long __must_check | |||
326 | strncpy_from_user(char *dst, const char __user *src, long count) | 326 | strncpy_from_user(char *dst, const char __user *src, long count) |
327 | { | 327 | { |
328 | might_fault(); | 328 | might_fault(); |
329 | return uaccess.strncpy_from_user(count, src, dst); | 329 | return uaccess.strncpy_from_user(dst, src, count); |
330 | } | 330 | } |
331 | 331 | ||
332 | static inline unsigned long | 332 | static inline unsigned long |
333 | strnlen_user(const char __user * src, unsigned long n) | 333 | strnlen_user(const char __user * src, unsigned long n) |
334 | { | 334 | { |
335 | might_fault(); | 335 | might_fault(); |
336 | return uaccess.strnlen_user(n, src); | 336 | return uaccess.strnlen_user(src, n); |
337 | } | 337 | } |
338 | 338 | ||
339 | /** | 339 | /** |
@@ -359,14 +359,14 @@ strnlen_user(const char __user * src, unsigned long n) | |||
359 | static inline unsigned long __must_check | 359 | static inline unsigned long __must_check |
360 | __clear_user(void __user *to, unsigned long n) | 360 | __clear_user(void __user *to, unsigned long n) |
361 | { | 361 | { |
362 | return uaccess.clear_user(n, to); | 362 | return uaccess.clear_user(to, n); |
363 | } | 363 | } |
364 | 364 | ||
365 | static inline unsigned long __must_check | 365 | static inline unsigned long __must_check |
366 | clear_user(void __user *to, unsigned long n) | 366 | clear_user(void __user *to, unsigned long n) |
367 | { | 367 | { |
368 | might_fault(); | 368 | might_fault(); |
369 | return uaccess.clear_user(n, to); | 369 | return uaccess.clear_user(to, n); |
370 | } | 370 | } |
371 | 371 | ||
372 | extern int copy_to_user_real(void __user *dest, void *src, size_t count); | 372 | extern int copy_to_user_real(void __user *dest, void *src, size_t count); |
diff --git a/arch/s390/lib/uaccess_mvcos.c b/arch/s390/lib/uaccess_mvcos.c index 4b7993bf69b9..95123f57aaf8 100644 --- a/arch/s390/lib/uaccess_mvcos.c +++ b/arch/s390/lib/uaccess_mvcos.c | |||
@@ -26,7 +26,7 @@ | |||
26 | #define SLR "slgr" | 26 | #define SLR "slgr" |
27 | #endif | 27 | #endif |
28 | 28 | ||
29 | static size_t copy_from_user_mvcos(size_t size, const void __user *ptr, void *x) | 29 | static size_t copy_from_user_mvcos(void *x, const void __user *ptr, size_t size) |
30 | { | 30 | { |
31 | register unsigned long reg0 asm("0") = 0x81UL; | 31 | register unsigned long reg0 asm("0") = 0x81UL; |
32 | unsigned long tmp1, tmp2; | 32 | unsigned long tmp1, tmp2; |
@@ -65,7 +65,7 @@ static size_t copy_from_user_mvcos(size_t size, const void __user *ptr, void *x) | |||
65 | return size; | 65 | return size; |
66 | } | 66 | } |
67 | 67 | ||
68 | static size_t copy_to_user_mvcos(size_t size, void __user *ptr, const void *x) | 68 | static size_t copy_to_user_mvcos(void __user *ptr, const void *x, size_t size) |
69 | { | 69 | { |
70 | register unsigned long reg0 asm("0") = 0x810000UL; | 70 | register unsigned long reg0 asm("0") = 0x810000UL; |
71 | unsigned long tmp1, tmp2; | 71 | unsigned long tmp1, tmp2; |
@@ -94,8 +94,8 @@ static size_t copy_to_user_mvcos(size_t size, void __user *ptr, const void *x) | |||
94 | return size; | 94 | return size; |
95 | } | 95 | } |
96 | 96 | ||
97 | static size_t copy_in_user_mvcos(size_t size, void __user *to, | 97 | static size_t copy_in_user_mvcos(void __user *to, const void __user *from, |
98 | const void __user *from) | 98 | size_t size) |
99 | { | 99 | { |
100 | register unsigned long reg0 asm("0") = 0x810081UL; | 100 | register unsigned long reg0 asm("0") = 0x810081UL; |
101 | unsigned long tmp1, tmp2; | 101 | unsigned long tmp1, tmp2; |
@@ -117,7 +117,7 @@ static size_t copy_in_user_mvcos(size_t size, void __user *to, | |||
117 | return size; | 117 | return size; |
118 | } | 118 | } |
119 | 119 | ||
120 | static size_t clear_user_mvcos(size_t size, void __user *to) | 120 | static size_t clear_user_mvcos(void __user *to, size_t size) |
121 | { | 121 | { |
122 | register unsigned long reg0 asm("0") = 0x810000UL; | 122 | register unsigned long reg0 asm("0") = 0x810000UL; |
123 | unsigned long tmp1, tmp2; | 123 | unsigned long tmp1, tmp2; |
@@ -145,7 +145,7 @@ static size_t clear_user_mvcos(size_t size, void __user *to) | |||
145 | return size; | 145 | return size; |
146 | } | 146 | } |
147 | 147 | ||
148 | static size_t strnlen_user_mvcos(size_t count, const char __user *src) | 148 | static size_t strnlen_user_mvcos(const char __user *src, size_t count) |
149 | { | 149 | { |
150 | size_t done, len, offset, len_str; | 150 | size_t done, len, offset, len_str; |
151 | char buf[256]; | 151 | char buf[256]; |
@@ -155,7 +155,7 @@ static size_t strnlen_user_mvcos(size_t count, const char __user *src) | |||
155 | offset = (size_t)src & ~PAGE_MASK; | 155 | offset = (size_t)src & ~PAGE_MASK; |
156 | len = min(256UL, PAGE_SIZE - offset); | 156 | len = min(256UL, PAGE_SIZE - offset); |
157 | len = min(count - done, len); | 157 | len = min(count - done, len); |
158 | if (copy_from_user_mvcos(len, src, buf)) | 158 | if (copy_from_user_mvcos(buf, src, len)) |
159 | return 0; | 159 | return 0; |
160 | len_str = strnlen(buf, len); | 160 | len_str = strnlen(buf, len); |
161 | done += len_str; | 161 | done += len_str; |
@@ -164,8 +164,8 @@ static size_t strnlen_user_mvcos(size_t count, const char __user *src) | |||
164 | return done + 1; | 164 | return done + 1; |
165 | } | 165 | } |
166 | 166 | ||
167 | static size_t strncpy_from_user_mvcos(size_t count, const char __user *src, | 167 | static size_t strncpy_from_user_mvcos(char *dst, const char __user *src, |
168 | char *dst) | 168 | size_t count) |
169 | { | 169 | { |
170 | size_t done, len, offset, len_str; | 170 | size_t done, len, offset, len_str; |
171 | 171 | ||
@@ -175,7 +175,7 @@ static size_t strncpy_from_user_mvcos(size_t count, const char __user *src, | |||
175 | do { | 175 | do { |
176 | offset = (size_t)src & ~PAGE_MASK; | 176 | offset = (size_t)src & ~PAGE_MASK; |
177 | len = min(count - done, PAGE_SIZE - offset); | 177 | len = min(count - done, PAGE_SIZE - offset); |
178 | if (copy_from_user_mvcos(len, src, dst)) | 178 | if (copy_from_user_mvcos(dst, src, len)) |
179 | return -EFAULT; | 179 | return -EFAULT; |
180 | len_str = strnlen(dst, len); | 180 | len_str = strnlen(dst, len); |
181 | done += len_str; | 181 | done += len_str; |
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index 61ebcc9ccb34..2fa696b39b56 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #define SLR "slgr" | 22 | #define SLR "slgr" |
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | static size_t strnlen_kernel(size_t count, const char __user *src) | 25 | static size_t strnlen_kernel(const char __user *src, size_t count) |
26 | { | 26 | { |
27 | register unsigned long reg0 asm("0") = 0UL; | 27 | register unsigned long reg0 asm("0") = 0UL; |
28 | unsigned long tmp1, tmp2; | 28 | unsigned long tmp1, tmp2; |
@@ -42,8 +42,8 @@ static size_t strnlen_kernel(size_t count, const char __user *src) | |||
42 | return count; | 42 | return count; |
43 | } | 43 | } |
44 | 44 | ||
45 | static size_t copy_in_kernel(size_t count, void __user *to, | 45 | static size_t copy_in_kernel(void __user *to, const void __user *from, |
46 | const void __user *from) | 46 | size_t count) |
47 | { | 47 | { |
48 | unsigned long tmp1; | 48 | unsigned long tmp1; |
49 | 49 | ||
@@ -211,26 +211,26 @@ fault: | |||
211 | return 0; | 211 | return 0; |
212 | } | 212 | } |
213 | 213 | ||
214 | static size_t copy_from_user_pt(size_t n, const void __user *from, void *to) | 214 | static size_t copy_from_user_pt(void *to, const void __user *from, size_t n) |
215 | { | 215 | { |
216 | size_t rc; | 216 | size_t rc; |
217 | 217 | ||
218 | if (segment_eq(get_fs(), KERNEL_DS)) | 218 | if (segment_eq(get_fs(), KERNEL_DS)) |
219 | return copy_in_kernel(n, (void __user *) to, from); | 219 | return copy_in_kernel((void __user *) to, from, n); |
220 | rc = __user_copy_pt((unsigned long) from, to, n, 0); | 220 | rc = __user_copy_pt((unsigned long) from, to, n, 0); |
221 | if (unlikely(rc)) | 221 | if (unlikely(rc)) |
222 | memset(to + n - rc, 0, rc); | 222 | memset(to + n - rc, 0, rc); |
223 | return rc; | 223 | return rc; |
224 | } | 224 | } |
225 | 225 | ||
226 | static size_t copy_to_user_pt(size_t n, void __user *to, const void *from) | 226 | static size_t copy_to_user_pt(void __user *to, const void *from, size_t n) |
227 | { | 227 | { |
228 | if (segment_eq(get_fs(), KERNEL_DS)) | 228 | if (segment_eq(get_fs(), KERNEL_DS)) |
229 | return copy_in_kernel(n, to, (void __user *) from); | 229 | return copy_in_kernel(to, (void __user *) from, n); |
230 | return __user_copy_pt((unsigned long) to, (void *) from, n, 1); | 230 | return __user_copy_pt((unsigned long) to, (void *) from, n, 1); |
231 | } | 231 | } |
232 | 232 | ||
233 | static size_t clear_user_pt(size_t n, void __user *to) | 233 | static size_t clear_user_pt(void __user *to, size_t n) |
234 | { | 234 | { |
235 | void *zpage = (void *) empty_zero_page; | 235 | void *zpage = (void *) empty_zero_page; |
236 | long done, size, ret; | 236 | long done, size, ret; |
@@ -242,7 +242,7 @@ static size_t clear_user_pt(size_t n, void __user *to) | |||
242 | else | 242 | else |
243 | size = n - done; | 243 | size = n - done; |
244 | if (segment_eq(get_fs(), KERNEL_DS)) | 244 | if (segment_eq(get_fs(), KERNEL_DS)) |
245 | ret = copy_in_kernel(n, to, (void __user *) zpage); | 245 | ret = copy_in_kernel(to, (void __user *) zpage, n); |
246 | else | 246 | else |
247 | ret = __user_copy_pt((unsigned long) to, zpage, size, 1); | 247 | ret = __user_copy_pt((unsigned long) to, zpage, size, 1); |
248 | done += size; | 248 | done += size; |
@@ -253,7 +253,7 @@ static size_t clear_user_pt(size_t n, void __user *to) | |||
253 | return 0; | 253 | return 0; |
254 | } | 254 | } |
255 | 255 | ||
256 | static size_t strnlen_user_pt(size_t count, const char __user *src) | 256 | static size_t strnlen_user_pt(const char __user *src, size_t count) |
257 | { | 257 | { |
258 | unsigned long uaddr = (unsigned long) src; | 258 | unsigned long uaddr = (unsigned long) src; |
259 | struct mm_struct *mm = current->mm; | 259 | struct mm_struct *mm = current->mm; |
@@ -263,7 +263,7 @@ static size_t strnlen_user_pt(size_t count, const char __user *src) | |||
263 | if (unlikely(!count)) | 263 | if (unlikely(!count)) |
264 | return 0; | 264 | return 0; |
265 | if (segment_eq(get_fs(), KERNEL_DS)) | 265 | if (segment_eq(get_fs(), KERNEL_DS)) |
266 | return strnlen_kernel(count, src); | 266 | return strnlen_kernel(src, count); |
267 | if (!mm) | 267 | if (!mm) |
268 | return 0; | 268 | return 0; |
269 | done = 0; | 269 | done = 0; |
@@ -289,8 +289,8 @@ fault: | |||
289 | goto retry; | 289 | goto retry; |
290 | } | 290 | } |
291 | 291 | ||
292 | static size_t strncpy_from_user_pt(size_t count, const char __user *src, | 292 | static size_t strncpy_from_user_pt(char *dst, const char __user *src, |
293 | char *dst) | 293 | size_t count) |
294 | { | 294 | { |
295 | size_t done, len, offset, len_str; | 295 | size_t done, len, offset, len_str; |
296 | 296 | ||
@@ -301,7 +301,7 @@ static size_t strncpy_from_user_pt(size_t count, const char __user *src, | |||
301 | offset = (size_t)src & ~PAGE_MASK; | 301 | offset = (size_t)src & ~PAGE_MASK; |
302 | len = min(count - done, PAGE_SIZE - offset); | 302 | len = min(count - done, PAGE_SIZE - offset); |
303 | if (segment_eq(get_fs(), KERNEL_DS)) { | 303 | if (segment_eq(get_fs(), KERNEL_DS)) { |
304 | if (copy_in_kernel(len, (void __user *) dst, src)) | 304 | if (copy_in_kernel((void __user *) dst, src, len)) |
305 | return -EFAULT; | 305 | return -EFAULT; |
306 | } else { | 306 | } else { |
307 | if (__user_copy_pt((unsigned long) src, dst, len, 0)) | 307 | if (__user_copy_pt((unsigned long) src, dst, len, 0)) |
@@ -315,8 +315,8 @@ static size_t strncpy_from_user_pt(size_t count, const char __user *src, | |||
315 | return done; | 315 | return done; |
316 | } | 316 | } |
317 | 317 | ||
318 | static size_t copy_in_user_pt(size_t n, void __user *to, | 318 | static size_t copy_in_user_pt(void __user *to, const void __user *from, |
319 | const void __user *from) | 319 | size_t n) |
320 | { | 320 | { |
321 | struct mm_struct *mm = current->mm; | 321 | struct mm_struct *mm = current->mm; |
322 | unsigned long offset_max, uaddr, done, size, error_code; | 322 | unsigned long offset_max, uaddr, done, size, error_code; |
@@ -326,7 +326,7 @@ static size_t copy_in_user_pt(size_t n, void __user *to, | |||
326 | int write_user; | 326 | int write_user; |
327 | 327 | ||
328 | if (segment_eq(get_fs(), KERNEL_DS)) | 328 | if (segment_eq(get_fs(), KERNEL_DS)) |
329 | return copy_in_kernel(n, to, from); | 329 | return copy_in_kernel(to, from, n); |
330 | if (!mm) | 330 | if (!mm) |
331 | return n; | 331 | return n; |
332 | done = 0; | 332 | done = 0; |