Commit 3274092b49271e24e1da4d282817822a97591cd7
Committed by
Greg Kroah-Hartman
1 parent
cebf41113c
Fix autofs compile without CONFIG_COMPAT
commit 3c761ea05a8900a907f32b628611873f6bef24b2 upstream. The autofs compat handling fix caused a compile failure when CONFIG_COMPAT isn't defined. Instead of adding random #ifdef'fery in autofs, let's just make the compat helpers earlier to use: without CONFIG_COMPAT, is_compat_task() just hardcodes to zero. We could probably do something similar for a number of other cases where we have #ifdef's in code, but this is the low-hanging fruit. Reported-and-tested-by: Andreas Schwab <schwab@linux-m68k.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Cc: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing 1 changed file with 4 additions and 0 deletions Inline Diff
include/linux/compat.h
1 | #ifndef _LINUX_COMPAT_H | 1 | #ifndef _LINUX_COMPAT_H |
2 | #define _LINUX_COMPAT_H | 2 | #define _LINUX_COMPAT_H |
3 | /* | 3 | /* |
4 | * These are the type definitions for the architecture specific | 4 | * These are the type definitions for the architecture specific |
5 | * syscall compatibility layer. | 5 | * syscall compatibility layer. |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #ifdef CONFIG_COMPAT | 8 | #ifdef CONFIG_COMPAT |
9 | 9 | ||
10 | #include <linux/stat.h> | 10 | #include <linux/stat.h> |
11 | #include <linux/param.h> /* for HZ */ | 11 | #include <linux/param.h> /* for HZ */ |
12 | #include <linux/sem.h> | 12 | #include <linux/sem.h> |
13 | #include <linux/socket.h> | 13 | #include <linux/socket.h> |
14 | #include <linux/if.h> | 14 | #include <linux/if.h> |
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/aio_abi.h> /* for aio_context_t */ | 16 | #include <linux/aio_abi.h> /* for aio_context_t */ |
17 | 17 | ||
18 | #include <asm/compat.h> | 18 | #include <asm/compat.h> |
19 | #include <asm/siginfo.h> | 19 | #include <asm/siginfo.h> |
20 | #include <asm/signal.h> | 20 | #include <asm/signal.h> |
21 | 21 | ||
22 | #define compat_jiffies_to_clock_t(x) \ | 22 | #define compat_jiffies_to_clock_t(x) \ |
23 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) | 23 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) |
24 | 24 | ||
25 | typedef __compat_uid32_t compat_uid_t; | 25 | typedef __compat_uid32_t compat_uid_t; |
26 | typedef __compat_gid32_t compat_gid_t; | 26 | typedef __compat_gid32_t compat_gid_t; |
27 | 27 | ||
28 | struct compat_sel_arg_struct; | 28 | struct compat_sel_arg_struct; |
29 | struct rusage; | 29 | struct rusage; |
30 | 30 | ||
31 | struct compat_itimerspec { | 31 | struct compat_itimerspec { |
32 | struct compat_timespec it_interval; | 32 | struct compat_timespec it_interval; |
33 | struct compat_timespec it_value; | 33 | struct compat_timespec it_value; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | struct compat_utimbuf { | 36 | struct compat_utimbuf { |
37 | compat_time_t actime; | 37 | compat_time_t actime; |
38 | compat_time_t modtime; | 38 | compat_time_t modtime; |
39 | }; | 39 | }; |
40 | 40 | ||
41 | struct compat_itimerval { | 41 | struct compat_itimerval { |
42 | struct compat_timeval it_interval; | 42 | struct compat_timeval it_interval; |
43 | struct compat_timeval it_value; | 43 | struct compat_timeval it_value; |
44 | }; | 44 | }; |
45 | 45 | ||
46 | struct compat_tms { | 46 | struct compat_tms { |
47 | compat_clock_t tms_utime; | 47 | compat_clock_t tms_utime; |
48 | compat_clock_t tms_stime; | 48 | compat_clock_t tms_stime; |
49 | compat_clock_t tms_cutime; | 49 | compat_clock_t tms_cutime; |
50 | compat_clock_t tms_cstime; | 50 | compat_clock_t tms_cstime; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | struct compat_timex { | 53 | struct compat_timex { |
54 | compat_uint_t modes; | 54 | compat_uint_t modes; |
55 | compat_long_t offset; | 55 | compat_long_t offset; |
56 | compat_long_t freq; | 56 | compat_long_t freq; |
57 | compat_long_t maxerror; | 57 | compat_long_t maxerror; |
58 | compat_long_t esterror; | 58 | compat_long_t esterror; |
59 | compat_int_t status; | 59 | compat_int_t status; |
60 | compat_long_t constant; | 60 | compat_long_t constant; |
61 | compat_long_t precision; | 61 | compat_long_t precision; |
62 | compat_long_t tolerance; | 62 | compat_long_t tolerance; |
63 | struct compat_timeval time; | 63 | struct compat_timeval time; |
64 | compat_long_t tick; | 64 | compat_long_t tick; |
65 | compat_long_t ppsfreq; | 65 | compat_long_t ppsfreq; |
66 | compat_long_t jitter; | 66 | compat_long_t jitter; |
67 | compat_int_t shift; | 67 | compat_int_t shift; |
68 | compat_long_t stabil; | 68 | compat_long_t stabil; |
69 | compat_long_t jitcnt; | 69 | compat_long_t jitcnt; |
70 | compat_long_t calcnt; | 70 | compat_long_t calcnt; |
71 | compat_long_t errcnt; | 71 | compat_long_t errcnt; |
72 | compat_long_t stbcnt; | 72 | compat_long_t stbcnt; |
73 | compat_int_t tai; | 73 | compat_int_t tai; |
74 | 74 | ||
75 | compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; | 75 | compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; |
76 | compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; | 76 | compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; |
77 | compat_int_t:32; compat_int_t:32; compat_int_t:32; | 77 | compat_int_t:32; compat_int_t:32; compat_int_t:32; |
78 | }; | 78 | }; |
79 | 79 | ||
80 | #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) | 80 | #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) |
81 | 81 | ||
82 | typedef struct { | 82 | typedef struct { |
83 | compat_sigset_word sig[_COMPAT_NSIG_WORDS]; | 83 | compat_sigset_word sig[_COMPAT_NSIG_WORDS]; |
84 | } compat_sigset_t; | 84 | } compat_sigset_t; |
85 | 85 | ||
86 | extern int get_compat_timespec(struct timespec *, | 86 | extern int get_compat_timespec(struct timespec *, |
87 | const struct compat_timespec __user *); | 87 | const struct compat_timespec __user *); |
88 | extern int put_compat_timespec(const struct timespec *, | 88 | extern int put_compat_timespec(const struct timespec *, |
89 | struct compat_timespec __user *); | 89 | struct compat_timespec __user *); |
90 | 90 | ||
91 | struct compat_iovec { | 91 | struct compat_iovec { |
92 | compat_uptr_t iov_base; | 92 | compat_uptr_t iov_base; |
93 | compat_size_t iov_len; | 93 | compat_size_t iov_len; |
94 | }; | 94 | }; |
95 | 95 | ||
96 | struct compat_rlimit { | 96 | struct compat_rlimit { |
97 | compat_ulong_t rlim_cur; | 97 | compat_ulong_t rlim_cur; |
98 | compat_ulong_t rlim_max; | 98 | compat_ulong_t rlim_max; |
99 | }; | 99 | }; |
100 | 100 | ||
101 | struct compat_rusage { | 101 | struct compat_rusage { |
102 | struct compat_timeval ru_utime; | 102 | struct compat_timeval ru_utime; |
103 | struct compat_timeval ru_stime; | 103 | struct compat_timeval ru_stime; |
104 | compat_long_t ru_maxrss; | 104 | compat_long_t ru_maxrss; |
105 | compat_long_t ru_ixrss; | 105 | compat_long_t ru_ixrss; |
106 | compat_long_t ru_idrss; | 106 | compat_long_t ru_idrss; |
107 | compat_long_t ru_isrss; | 107 | compat_long_t ru_isrss; |
108 | compat_long_t ru_minflt; | 108 | compat_long_t ru_minflt; |
109 | compat_long_t ru_majflt; | 109 | compat_long_t ru_majflt; |
110 | compat_long_t ru_nswap; | 110 | compat_long_t ru_nswap; |
111 | compat_long_t ru_inblock; | 111 | compat_long_t ru_inblock; |
112 | compat_long_t ru_oublock; | 112 | compat_long_t ru_oublock; |
113 | compat_long_t ru_msgsnd; | 113 | compat_long_t ru_msgsnd; |
114 | compat_long_t ru_msgrcv; | 114 | compat_long_t ru_msgrcv; |
115 | compat_long_t ru_nsignals; | 115 | compat_long_t ru_nsignals; |
116 | compat_long_t ru_nvcsw; | 116 | compat_long_t ru_nvcsw; |
117 | compat_long_t ru_nivcsw; | 117 | compat_long_t ru_nivcsw; |
118 | }; | 118 | }; |
119 | 119 | ||
120 | extern int put_compat_rusage(const struct rusage *, | 120 | extern int put_compat_rusage(const struct rusage *, |
121 | struct compat_rusage __user *); | 121 | struct compat_rusage __user *); |
122 | 122 | ||
123 | struct compat_siginfo; | 123 | struct compat_siginfo; |
124 | 124 | ||
125 | extern asmlinkage long compat_sys_waitid(int, compat_pid_t, | 125 | extern asmlinkage long compat_sys_waitid(int, compat_pid_t, |
126 | struct compat_siginfo __user *, int, | 126 | struct compat_siginfo __user *, int, |
127 | struct compat_rusage __user *); | 127 | struct compat_rusage __user *); |
128 | 128 | ||
129 | struct compat_dirent { | 129 | struct compat_dirent { |
130 | u32 d_ino; | 130 | u32 d_ino; |
131 | compat_off_t d_off; | 131 | compat_off_t d_off; |
132 | u16 d_reclen; | 132 | u16 d_reclen; |
133 | char d_name[256]; | 133 | char d_name[256]; |
134 | }; | 134 | }; |
135 | 135 | ||
136 | struct compat_ustat { | 136 | struct compat_ustat { |
137 | compat_daddr_t f_tfree; | 137 | compat_daddr_t f_tfree; |
138 | compat_ino_t f_tinode; | 138 | compat_ino_t f_tinode; |
139 | char f_fname[6]; | 139 | char f_fname[6]; |
140 | char f_fpack[6]; | 140 | char f_fpack[6]; |
141 | }; | 141 | }; |
142 | 142 | ||
143 | typedef union compat_sigval { | 143 | typedef union compat_sigval { |
144 | compat_int_t sival_int; | 144 | compat_int_t sival_int; |
145 | compat_uptr_t sival_ptr; | 145 | compat_uptr_t sival_ptr; |
146 | } compat_sigval_t; | 146 | } compat_sigval_t; |
147 | 147 | ||
148 | #define COMPAT_SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3) | 148 | #define COMPAT_SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3) |
149 | 149 | ||
150 | typedef struct compat_sigevent { | 150 | typedef struct compat_sigevent { |
151 | compat_sigval_t sigev_value; | 151 | compat_sigval_t sigev_value; |
152 | compat_int_t sigev_signo; | 152 | compat_int_t sigev_signo; |
153 | compat_int_t sigev_notify; | 153 | compat_int_t sigev_notify; |
154 | union { | 154 | union { |
155 | compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE]; | 155 | compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE]; |
156 | compat_int_t _tid; | 156 | compat_int_t _tid; |
157 | 157 | ||
158 | struct { | 158 | struct { |
159 | compat_uptr_t _function; | 159 | compat_uptr_t _function; |
160 | compat_uptr_t _attribute; | 160 | compat_uptr_t _attribute; |
161 | } _sigev_thread; | 161 | } _sigev_thread; |
162 | } _sigev_un; | 162 | } _sigev_un; |
163 | } compat_sigevent_t; | 163 | } compat_sigevent_t; |
164 | 164 | ||
165 | struct compat_ifmap { | 165 | struct compat_ifmap { |
166 | compat_ulong_t mem_start; | 166 | compat_ulong_t mem_start; |
167 | compat_ulong_t mem_end; | 167 | compat_ulong_t mem_end; |
168 | unsigned short base_addr; | 168 | unsigned short base_addr; |
169 | unsigned char irq; | 169 | unsigned char irq; |
170 | unsigned char dma; | 170 | unsigned char dma; |
171 | unsigned char port; | 171 | unsigned char port; |
172 | }; | 172 | }; |
173 | 173 | ||
174 | struct compat_if_settings { | 174 | struct compat_if_settings { |
175 | unsigned int type; /* Type of physical device or protocol */ | 175 | unsigned int type; /* Type of physical device or protocol */ |
176 | unsigned int size; /* Size of the data allocated by the caller */ | 176 | unsigned int size; /* Size of the data allocated by the caller */ |
177 | compat_uptr_t ifs_ifsu; /* union of pointers */ | 177 | compat_uptr_t ifs_ifsu; /* union of pointers */ |
178 | }; | 178 | }; |
179 | 179 | ||
180 | struct compat_ifreq { | 180 | struct compat_ifreq { |
181 | union { | 181 | union { |
182 | char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ | 182 | char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ |
183 | } ifr_ifrn; | 183 | } ifr_ifrn; |
184 | union { | 184 | union { |
185 | struct sockaddr ifru_addr; | 185 | struct sockaddr ifru_addr; |
186 | struct sockaddr ifru_dstaddr; | 186 | struct sockaddr ifru_dstaddr; |
187 | struct sockaddr ifru_broadaddr; | 187 | struct sockaddr ifru_broadaddr; |
188 | struct sockaddr ifru_netmask; | 188 | struct sockaddr ifru_netmask; |
189 | struct sockaddr ifru_hwaddr; | 189 | struct sockaddr ifru_hwaddr; |
190 | short ifru_flags; | 190 | short ifru_flags; |
191 | compat_int_t ifru_ivalue; | 191 | compat_int_t ifru_ivalue; |
192 | compat_int_t ifru_mtu; | 192 | compat_int_t ifru_mtu; |
193 | struct compat_ifmap ifru_map; | 193 | struct compat_ifmap ifru_map; |
194 | char ifru_slave[IFNAMSIZ]; /* Just fits the size */ | 194 | char ifru_slave[IFNAMSIZ]; /* Just fits the size */ |
195 | char ifru_newname[IFNAMSIZ]; | 195 | char ifru_newname[IFNAMSIZ]; |
196 | compat_caddr_t ifru_data; | 196 | compat_caddr_t ifru_data; |
197 | struct compat_if_settings ifru_settings; | 197 | struct compat_if_settings ifru_settings; |
198 | } ifr_ifru; | 198 | } ifr_ifru; |
199 | }; | 199 | }; |
200 | 200 | ||
201 | struct compat_ifconf { | 201 | struct compat_ifconf { |
202 | compat_int_t ifc_len; /* size of buffer */ | 202 | compat_int_t ifc_len; /* size of buffer */ |
203 | compat_caddr_t ifcbuf; | 203 | compat_caddr_t ifcbuf; |
204 | }; | 204 | }; |
205 | 205 | ||
206 | struct compat_robust_list { | 206 | struct compat_robust_list { |
207 | compat_uptr_t next; | 207 | compat_uptr_t next; |
208 | }; | 208 | }; |
209 | 209 | ||
210 | struct compat_robust_list_head { | 210 | struct compat_robust_list_head { |
211 | struct compat_robust_list list; | 211 | struct compat_robust_list list; |
212 | compat_long_t futex_offset; | 212 | compat_long_t futex_offset; |
213 | compat_uptr_t list_op_pending; | 213 | compat_uptr_t list_op_pending; |
214 | }; | 214 | }; |
215 | 215 | ||
216 | struct compat_statfs; | 216 | struct compat_statfs; |
217 | struct compat_statfs64; | 217 | struct compat_statfs64; |
218 | struct compat_old_linux_dirent; | 218 | struct compat_old_linux_dirent; |
219 | struct compat_linux_dirent; | 219 | struct compat_linux_dirent; |
220 | struct linux_dirent64; | 220 | struct linux_dirent64; |
221 | struct compat_msghdr; | 221 | struct compat_msghdr; |
222 | struct compat_mmsghdr; | 222 | struct compat_mmsghdr; |
223 | struct compat_sysinfo; | 223 | struct compat_sysinfo; |
224 | struct compat_sysctl_args; | 224 | struct compat_sysctl_args; |
225 | struct compat_kexec_segment; | 225 | struct compat_kexec_segment; |
226 | struct compat_mq_attr; | 226 | struct compat_mq_attr; |
227 | 227 | ||
228 | extern void compat_exit_robust_list(struct task_struct *curr); | 228 | extern void compat_exit_robust_list(struct task_struct *curr); |
229 | 229 | ||
230 | asmlinkage long | 230 | asmlinkage long |
231 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, | 231 | compat_sys_set_robust_list(struct compat_robust_list_head __user *head, |
232 | compat_size_t len); | 232 | compat_size_t len); |
233 | asmlinkage long | 233 | asmlinkage long |
234 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, | 234 | compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr, |
235 | compat_size_t __user *len_ptr); | 235 | compat_size_t __user *len_ptr); |
236 | 236 | ||
237 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); | 237 | long compat_sys_semctl(int first, int second, int third, void __user *uptr); |
238 | long compat_sys_msgsnd(int first, int second, int third, void __user *uptr); | 238 | long compat_sys_msgsnd(int first, int second, int third, void __user *uptr); |
239 | long compat_sys_msgrcv(int first, int second, int msgtyp, int third, | 239 | long compat_sys_msgrcv(int first, int second, int msgtyp, int third, |
240 | int version, void __user *uptr); | 240 | int version, void __user *uptr); |
241 | long compat_sys_msgctl(int first, int second, void __user *uptr); | 241 | long compat_sys_msgctl(int first, int second, void __user *uptr); |
242 | long compat_sys_shmat(int first, int second, compat_uptr_t third, int version, | 242 | long compat_sys_shmat(int first, int second, compat_uptr_t third, int version, |
243 | void __user *uptr); | 243 | void __user *uptr); |
244 | long compat_sys_shmctl(int first, int second, void __user *uptr); | 244 | long compat_sys_shmctl(int first, int second, void __user *uptr); |
245 | long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, | 245 | long compat_sys_semtimedop(int semid, struct sembuf __user *tsems, |
246 | unsigned nsems, const struct compat_timespec __user *timeout); | 246 | unsigned nsems, const struct compat_timespec __user *timeout); |
247 | asmlinkage long compat_sys_keyctl(u32 option, | 247 | asmlinkage long compat_sys_keyctl(u32 option, |
248 | u32 arg2, u32 arg3, u32 arg4, u32 arg5); | 248 | u32 arg2, u32 arg3, u32 arg4, u32 arg5); |
249 | asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32); | 249 | asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32); |
250 | 250 | ||
251 | asmlinkage ssize_t compat_sys_readv(unsigned long fd, | 251 | asmlinkage ssize_t compat_sys_readv(unsigned long fd, |
252 | const struct compat_iovec __user *vec, unsigned long vlen); | 252 | const struct compat_iovec __user *vec, unsigned long vlen); |
253 | asmlinkage ssize_t compat_sys_writev(unsigned long fd, | 253 | asmlinkage ssize_t compat_sys_writev(unsigned long fd, |
254 | const struct compat_iovec __user *vec, unsigned long vlen); | 254 | const struct compat_iovec __user *vec, unsigned long vlen); |
255 | asmlinkage ssize_t compat_sys_preadv(unsigned long fd, | 255 | asmlinkage ssize_t compat_sys_preadv(unsigned long fd, |
256 | const struct compat_iovec __user *vec, | 256 | const struct compat_iovec __user *vec, |
257 | unsigned long vlen, u32 pos_low, u32 pos_high); | 257 | unsigned long vlen, u32 pos_low, u32 pos_high); |
258 | asmlinkage ssize_t compat_sys_pwritev(unsigned long fd, | 258 | asmlinkage ssize_t compat_sys_pwritev(unsigned long fd, |
259 | const struct compat_iovec __user *vec, | 259 | const struct compat_iovec __user *vec, |
260 | unsigned long vlen, u32 pos_low, u32 pos_high); | 260 | unsigned long vlen, u32 pos_low, u32 pos_high); |
261 | 261 | ||
262 | int compat_do_execve(char *filename, compat_uptr_t __user *argv, | 262 | int compat_do_execve(char *filename, compat_uptr_t __user *argv, |
263 | compat_uptr_t __user *envp, struct pt_regs *regs); | 263 | compat_uptr_t __user *envp, struct pt_regs *regs); |
264 | 264 | ||
265 | asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, | 265 | asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, |
266 | compat_ulong_t __user *outp, compat_ulong_t __user *exp, | 266 | compat_ulong_t __user *outp, compat_ulong_t __user *exp, |
267 | struct compat_timeval __user *tvp); | 267 | struct compat_timeval __user *tvp); |
268 | 268 | ||
269 | asmlinkage long compat_sys_old_select(struct compat_sel_arg_struct __user *arg); | 269 | asmlinkage long compat_sys_old_select(struct compat_sel_arg_struct __user *arg); |
270 | 270 | ||
271 | asmlinkage long compat_sys_wait4(compat_pid_t pid, | 271 | asmlinkage long compat_sys_wait4(compat_pid_t pid, |
272 | compat_uint_t __user *stat_addr, int options, | 272 | compat_uint_t __user *stat_addr, int options, |
273 | struct compat_rusage __user *ru); | 273 | struct compat_rusage __user *ru); |
274 | 274 | ||
275 | #define BITS_PER_COMPAT_LONG (8*sizeof(compat_long_t)) | 275 | #define BITS_PER_COMPAT_LONG (8*sizeof(compat_long_t)) |
276 | 276 | ||
277 | #define BITS_TO_COMPAT_LONGS(bits) \ | 277 | #define BITS_TO_COMPAT_LONGS(bits) \ |
278 | (((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG) | 278 | (((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG) |
279 | 279 | ||
280 | long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask, | 280 | long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask, |
281 | unsigned long bitmap_size); | 281 | unsigned long bitmap_size); |
282 | long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask, | 282 | long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask, |
283 | unsigned long bitmap_size); | 283 | unsigned long bitmap_size); |
284 | int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from); | 284 | int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from); |
285 | int copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from); | 285 | int copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from); |
286 | int get_compat_sigevent(struct sigevent *event, | 286 | int get_compat_sigevent(struct sigevent *event, |
287 | const struct compat_sigevent __user *u_event); | 287 | const struct compat_sigevent __user *u_event); |
288 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, | 288 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, |
289 | struct compat_siginfo __user *uinfo); | 289 | struct compat_siginfo __user *uinfo); |
290 | 290 | ||
291 | static inline int compat_timeval_compare(struct compat_timeval *lhs, | 291 | static inline int compat_timeval_compare(struct compat_timeval *lhs, |
292 | struct compat_timeval *rhs) | 292 | struct compat_timeval *rhs) |
293 | { | 293 | { |
294 | if (lhs->tv_sec < rhs->tv_sec) | 294 | if (lhs->tv_sec < rhs->tv_sec) |
295 | return -1; | 295 | return -1; |
296 | if (lhs->tv_sec > rhs->tv_sec) | 296 | if (lhs->tv_sec > rhs->tv_sec) |
297 | return 1; | 297 | return 1; |
298 | return lhs->tv_usec - rhs->tv_usec; | 298 | return lhs->tv_usec - rhs->tv_usec; |
299 | } | 299 | } |
300 | 300 | ||
301 | static inline int compat_timespec_compare(struct compat_timespec *lhs, | 301 | static inline int compat_timespec_compare(struct compat_timespec *lhs, |
302 | struct compat_timespec *rhs) | 302 | struct compat_timespec *rhs) |
303 | { | 303 | { |
304 | if (lhs->tv_sec < rhs->tv_sec) | 304 | if (lhs->tv_sec < rhs->tv_sec) |
305 | return -1; | 305 | return -1; |
306 | if (lhs->tv_sec > rhs->tv_sec) | 306 | if (lhs->tv_sec > rhs->tv_sec) |
307 | return 1; | 307 | return 1; |
308 | return lhs->tv_nsec - rhs->tv_nsec; | 308 | return lhs->tv_nsec - rhs->tv_nsec; |
309 | } | 309 | } |
310 | 310 | ||
311 | extern int get_compat_itimerspec(struct itimerspec *dst, | 311 | extern int get_compat_itimerspec(struct itimerspec *dst, |
312 | const struct compat_itimerspec __user *src); | 312 | const struct compat_itimerspec __user *src); |
313 | extern int put_compat_itimerspec(struct compat_itimerspec __user *dst, | 313 | extern int put_compat_itimerspec(struct compat_itimerspec __user *dst, |
314 | const struct itimerspec *src); | 314 | const struct itimerspec *src); |
315 | 315 | ||
316 | asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv, | 316 | asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv, |
317 | struct timezone __user *tz); | 317 | struct timezone __user *tz); |
318 | asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv, | 318 | asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv, |
319 | struct timezone __user *tz); | 319 | struct timezone __user *tz); |
320 | 320 | ||
321 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); | 321 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); |
322 | 322 | ||
323 | extern int compat_printk(const char *fmt, ...); | 323 | extern int compat_printk(const char *fmt, ...); |
324 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); | 324 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); |
325 | 325 | ||
326 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, | 326 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, |
327 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, | 327 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, |
328 | const compat_ulong_t __user *new_nodes); | 328 | const compat_ulong_t __user *new_nodes); |
329 | 329 | ||
330 | extern int compat_ptrace_request(struct task_struct *child, | 330 | extern int compat_ptrace_request(struct task_struct *child, |
331 | compat_long_t request, | 331 | compat_long_t request, |
332 | compat_ulong_t addr, compat_ulong_t data); | 332 | compat_ulong_t addr, compat_ulong_t data); |
333 | 333 | ||
334 | extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request, | 334 | extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request, |
335 | compat_ulong_t addr, compat_ulong_t data); | 335 | compat_ulong_t addr, compat_ulong_t data); |
336 | asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, | 336 | asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, |
337 | compat_long_t addr, compat_long_t data); | 337 | compat_long_t addr, compat_long_t data); |
338 | 338 | ||
339 | /* | 339 | /* |
340 | * epoll (fs/eventpoll.c) compat bits follow ... | 340 | * epoll (fs/eventpoll.c) compat bits follow ... |
341 | */ | 341 | */ |
342 | struct epoll_event; | 342 | struct epoll_event; |
343 | #define compat_epoll_event epoll_event | 343 | #define compat_epoll_event epoll_event |
344 | asmlinkage long compat_sys_epoll_pwait(int epfd, | 344 | asmlinkage long compat_sys_epoll_pwait(int epfd, |
345 | struct compat_epoll_event __user *events, | 345 | struct compat_epoll_event __user *events, |
346 | int maxevents, int timeout, | 346 | int maxevents, int timeout, |
347 | const compat_sigset_t __user *sigmask, | 347 | const compat_sigset_t __user *sigmask, |
348 | compat_size_t sigsetsize); | 348 | compat_size_t sigsetsize); |
349 | 349 | ||
350 | asmlinkage long compat_sys_utime(const char __user *filename, | 350 | asmlinkage long compat_sys_utime(const char __user *filename, |
351 | struct compat_utimbuf __user *t); | 351 | struct compat_utimbuf __user *t); |
352 | asmlinkage long compat_sys_utimensat(unsigned int dfd, | 352 | asmlinkage long compat_sys_utimensat(unsigned int dfd, |
353 | const char __user *filename, | 353 | const char __user *filename, |
354 | struct compat_timespec __user *t, | 354 | struct compat_timespec __user *t, |
355 | int flags); | 355 | int flags); |
356 | 356 | ||
357 | asmlinkage long compat_sys_time(compat_time_t __user *tloc); | 357 | asmlinkage long compat_sys_time(compat_time_t __user *tloc); |
358 | asmlinkage long compat_sys_stime(compat_time_t __user *tptr); | 358 | asmlinkage long compat_sys_stime(compat_time_t __user *tptr); |
359 | asmlinkage long compat_sys_signalfd(int ufd, | 359 | asmlinkage long compat_sys_signalfd(int ufd, |
360 | const compat_sigset_t __user *sigmask, | 360 | const compat_sigset_t __user *sigmask, |
361 | compat_size_t sigsetsize); | 361 | compat_size_t sigsetsize); |
362 | asmlinkage long compat_sys_timerfd_settime(int ufd, int flags, | 362 | asmlinkage long compat_sys_timerfd_settime(int ufd, int flags, |
363 | const struct compat_itimerspec __user *utmr, | 363 | const struct compat_itimerspec __user *utmr, |
364 | struct compat_itimerspec __user *otmr); | 364 | struct compat_itimerspec __user *otmr); |
365 | asmlinkage long compat_sys_timerfd_gettime(int ufd, | 365 | asmlinkage long compat_sys_timerfd_gettime(int ufd, |
366 | struct compat_itimerspec __user *otmr); | 366 | struct compat_itimerspec __user *otmr); |
367 | 367 | ||
368 | asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, | 368 | asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, |
369 | __u32 __user *pages, | 369 | __u32 __user *pages, |
370 | const int __user *nodes, | 370 | const int __user *nodes, |
371 | int __user *status, | 371 | int __user *status, |
372 | int flags); | 372 | int flags); |
373 | asmlinkage long compat_sys_futimesat(unsigned int dfd, | 373 | asmlinkage long compat_sys_futimesat(unsigned int dfd, |
374 | const char __user *filename, | 374 | const char __user *filename, |
375 | struct compat_timeval __user *t); | 375 | struct compat_timeval __user *t); |
376 | asmlinkage long compat_sys_utimes(const char __user *filename, | 376 | asmlinkage long compat_sys_utimes(const char __user *filename, |
377 | struct compat_timeval __user *t); | 377 | struct compat_timeval __user *t); |
378 | asmlinkage long compat_sys_newstat(const char __user *filename, | 378 | asmlinkage long compat_sys_newstat(const char __user *filename, |
379 | struct compat_stat __user *statbuf); | 379 | struct compat_stat __user *statbuf); |
380 | asmlinkage long compat_sys_newlstat(const char __user *filename, | 380 | asmlinkage long compat_sys_newlstat(const char __user *filename, |
381 | struct compat_stat __user *statbuf); | 381 | struct compat_stat __user *statbuf); |
382 | asmlinkage long compat_sys_newfstatat(unsigned int dfd, | 382 | asmlinkage long compat_sys_newfstatat(unsigned int dfd, |
383 | const char __user *filename, | 383 | const char __user *filename, |
384 | struct compat_stat __user *statbuf, | 384 | struct compat_stat __user *statbuf, |
385 | int flag); | 385 | int flag); |
386 | asmlinkage long compat_sys_newfstat(unsigned int fd, | 386 | asmlinkage long compat_sys_newfstat(unsigned int fd, |
387 | struct compat_stat __user *statbuf); | 387 | struct compat_stat __user *statbuf); |
388 | asmlinkage long compat_sys_statfs(const char __user *pathname, | 388 | asmlinkage long compat_sys_statfs(const char __user *pathname, |
389 | struct compat_statfs __user *buf); | 389 | struct compat_statfs __user *buf); |
390 | asmlinkage long compat_sys_fstatfs(unsigned int fd, | 390 | asmlinkage long compat_sys_fstatfs(unsigned int fd, |
391 | struct compat_statfs __user *buf); | 391 | struct compat_statfs __user *buf); |
392 | asmlinkage long compat_sys_statfs64(const char __user *pathname, | 392 | asmlinkage long compat_sys_statfs64(const char __user *pathname, |
393 | compat_size_t sz, | 393 | compat_size_t sz, |
394 | struct compat_statfs64 __user *buf); | 394 | struct compat_statfs64 __user *buf); |
395 | asmlinkage long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz, | 395 | asmlinkage long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz, |
396 | struct compat_statfs64 __user *buf); | 396 | struct compat_statfs64 __user *buf); |
397 | asmlinkage long compat_sys_fcntl64(unsigned int fd, unsigned int cmd, | 397 | asmlinkage long compat_sys_fcntl64(unsigned int fd, unsigned int cmd, |
398 | unsigned long arg); | 398 | unsigned long arg); |
399 | asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd, | 399 | asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd, |
400 | unsigned long arg); | 400 | unsigned long arg); |
401 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); | 401 | asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); |
402 | asmlinkage long compat_sys_io_getevents(aio_context_t ctx_id, | 402 | asmlinkage long compat_sys_io_getevents(aio_context_t ctx_id, |
403 | unsigned long min_nr, | 403 | unsigned long min_nr, |
404 | unsigned long nr, | 404 | unsigned long nr, |
405 | struct io_event __user *events, | 405 | struct io_event __user *events, |
406 | struct compat_timespec __user *timeout); | 406 | struct compat_timespec __user *timeout); |
407 | asmlinkage long compat_sys_io_submit(aio_context_t ctx_id, int nr, | 407 | asmlinkage long compat_sys_io_submit(aio_context_t ctx_id, int nr, |
408 | u32 __user *iocb); | 408 | u32 __user *iocb); |
409 | asmlinkage long compat_sys_mount(const char __user *dev_name, | 409 | asmlinkage long compat_sys_mount(const char __user *dev_name, |
410 | const char __user *dir_name, | 410 | const char __user *dir_name, |
411 | const char __user *type, unsigned long flags, | 411 | const char __user *type, unsigned long flags, |
412 | const void __user *data); | 412 | const void __user *data); |
413 | asmlinkage long compat_sys_old_readdir(unsigned int fd, | 413 | asmlinkage long compat_sys_old_readdir(unsigned int fd, |
414 | struct compat_old_linux_dirent __user *, | 414 | struct compat_old_linux_dirent __user *, |
415 | unsigned int count); | 415 | unsigned int count); |
416 | asmlinkage long compat_sys_getdents(unsigned int fd, | 416 | asmlinkage long compat_sys_getdents(unsigned int fd, |
417 | struct compat_linux_dirent __user *dirent, | 417 | struct compat_linux_dirent __user *dirent, |
418 | unsigned int count); | 418 | unsigned int count); |
419 | asmlinkage long compat_sys_getdents64(unsigned int fd, | 419 | asmlinkage long compat_sys_getdents64(unsigned int fd, |
420 | struct linux_dirent64 __user *dirent, | 420 | struct linux_dirent64 __user *dirent, |
421 | unsigned int count); | 421 | unsigned int count); |
422 | asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, | 422 | asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, |
423 | unsigned int nr_segs, unsigned int flags); | 423 | unsigned int nr_segs, unsigned int flags); |
424 | asmlinkage long compat_sys_open(const char __user *filename, int flags, | 424 | asmlinkage long compat_sys_open(const char __user *filename, int flags, |
425 | int mode); | 425 | int mode); |
426 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, | 426 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, |
427 | int flags, int mode); | 427 | int flags, int mode); |
428 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, | 428 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, |
429 | struct file_handle __user *handle, | 429 | struct file_handle __user *handle, |
430 | int flags); | 430 | int flags); |
431 | asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, | 431 | asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, |
432 | compat_ulong_t __user *outp, | 432 | compat_ulong_t __user *outp, |
433 | compat_ulong_t __user *exp, | 433 | compat_ulong_t __user *exp, |
434 | struct compat_timespec __user *tsp, | 434 | struct compat_timespec __user *tsp, |
435 | void __user *sig); | 435 | void __user *sig); |
436 | asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, | 436 | asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, |
437 | unsigned int nfds, | 437 | unsigned int nfds, |
438 | struct compat_timespec __user *tsp, | 438 | struct compat_timespec __user *tsp, |
439 | const compat_sigset_t __user *sigmask, | 439 | const compat_sigset_t __user *sigmask, |
440 | compat_size_t sigsetsize); | 440 | compat_size_t sigsetsize); |
441 | asmlinkage long compat_sys_signalfd4(int ufd, | 441 | asmlinkage long compat_sys_signalfd4(int ufd, |
442 | const compat_sigset_t __user *sigmask, | 442 | const compat_sigset_t __user *sigmask, |
443 | compat_size_t sigsetsize, int flags); | 443 | compat_size_t sigsetsize, int flags); |
444 | asmlinkage long compat_sys_get_mempolicy(int __user *policy, | 444 | asmlinkage long compat_sys_get_mempolicy(int __user *policy, |
445 | compat_ulong_t __user *nmask, | 445 | compat_ulong_t __user *nmask, |
446 | compat_ulong_t maxnode, | 446 | compat_ulong_t maxnode, |
447 | compat_ulong_t addr, | 447 | compat_ulong_t addr, |
448 | compat_ulong_t flags); | 448 | compat_ulong_t flags); |
449 | asmlinkage long compat_sys_set_mempolicy(int mode, compat_ulong_t __user *nmask, | 449 | asmlinkage long compat_sys_set_mempolicy(int mode, compat_ulong_t __user *nmask, |
450 | compat_ulong_t maxnode); | 450 | compat_ulong_t maxnode); |
451 | asmlinkage long compat_sys_mbind(compat_ulong_t start, compat_ulong_t len, | 451 | asmlinkage long compat_sys_mbind(compat_ulong_t start, compat_ulong_t len, |
452 | compat_ulong_t mode, | 452 | compat_ulong_t mode, |
453 | compat_ulong_t __user *nmask, | 453 | compat_ulong_t __user *nmask, |
454 | compat_ulong_t maxnode, compat_ulong_t flags); | 454 | compat_ulong_t maxnode, compat_ulong_t flags); |
455 | 455 | ||
456 | asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, | 456 | asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, |
457 | char __user *optval, unsigned int optlen); | 457 | char __user *optval, unsigned int optlen); |
458 | asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, | 458 | asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, |
459 | unsigned flags); | 459 | unsigned flags); |
460 | asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg, | 460 | asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg, |
461 | unsigned vlen, unsigned int flags); | 461 | unsigned vlen, unsigned int flags); |
462 | asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, | 462 | asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, |
463 | unsigned int flags); | 463 | unsigned int flags); |
464 | asmlinkage long compat_sys_recv(int fd, void __user *buf, size_t len, | 464 | asmlinkage long compat_sys_recv(int fd, void __user *buf, size_t len, |
465 | unsigned flags); | 465 | unsigned flags); |
466 | asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, size_t len, | 466 | asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, size_t len, |
467 | unsigned flags, struct sockaddr __user *addr, | 467 | unsigned flags, struct sockaddr __user *addr, |
468 | int __user *addrlen); | 468 | int __user *addrlen); |
469 | asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg, | 469 | asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg, |
470 | unsigned vlen, unsigned int flags, | 470 | unsigned vlen, unsigned int flags, |
471 | struct compat_timespec __user *timeout); | 471 | struct compat_timespec __user *timeout); |
472 | asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp, | 472 | asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp, |
473 | struct compat_timespec __user *rmtp); | 473 | struct compat_timespec __user *rmtp); |
474 | asmlinkage long compat_sys_getitimer(int which, | 474 | asmlinkage long compat_sys_getitimer(int which, |
475 | struct compat_itimerval __user *it); | 475 | struct compat_itimerval __user *it); |
476 | asmlinkage long compat_sys_setitimer(int which, | 476 | asmlinkage long compat_sys_setitimer(int which, |
477 | struct compat_itimerval __user *in, | 477 | struct compat_itimerval __user *in, |
478 | struct compat_itimerval __user *out); | 478 | struct compat_itimerval __user *out); |
479 | asmlinkage long compat_sys_times(struct compat_tms __user *tbuf); | 479 | asmlinkage long compat_sys_times(struct compat_tms __user *tbuf); |
480 | asmlinkage long compat_sys_setrlimit(unsigned int resource, | 480 | asmlinkage long compat_sys_setrlimit(unsigned int resource, |
481 | struct compat_rlimit __user *rlim); | 481 | struct compat_rlimit __user *rlim); |
482 | asmlinkage long compat_sys_getrlimit(unsigned int resource, | 482 | asmlinkage long compat_sys_getrlimit(unsigned int resource, |
483 | struct compat_rlimit __user *rlim); | 483 | struct compat_rlimit __user *rlim); |
484 | asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru); | 484 | asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru); |
485 | asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, | 485 | asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, |
486 | unsigned int len, | 486 | unsigned int len, |
487 | compat_ulong_t __user *user_mask_ptr); | 487 | compat_ulong_t __user *user_mask_ptr); |
488 | asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, | 488 | asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, |
489 | unsigned int len, | 489 | unsigned int len, |
490 | compat_ulong_t __user *user_mask_ptr); | 490 | compat_ulong_t __user *user_mask_ptr); |
491 | asmlinkage long compat_sys_timer_create(clockid_t which_clock, | 491 | asmlinkage long compat_sys_timer_create(clockid_t which_clock, |
492 | struct compat_sigevent __user *timer_event_spec, | 492 | struct compat_sigevent __user *timer_event_spec, |
493 | timer_t __user *created_timer_id); | 493 | timer_t __user *created_timer_id); |
494 | asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags, | 494 | asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags, |
495 | struct compat_itimerspec __user *new, | 495 | struct compat_itimerspec __user *new, |
496 | struct compat_itimerspec __user *old); | 496 | struct compat_itimerspec __user *old); |
497 | asmlinkage long compat_sys_timer_gettime(timer_t timer_id, | 497 | asmlinkage long compat_sys_timer_gettime(timer_t timer_id, |
498 | struct compat_itimerspec __user *setting); | 498 | struct compat_itimerspec __user *setting); |
499 | asmlinkage long compat_sys_clock_settime(clockid_t which_clock, | 499 | asmlinkage long compat_sys_clock_settime(clockid_t which_clock, |
500 | struct compat_timespec __user *tp); | 500 | struct compat_timespec __user *tp); |
501 | asmlinkage long compat_sys_clock_gettime(clockid_t which_clock, | 501 | asmlinkage long compat_sys_clock_gettime(clockid_t which_clock, |
502 | struct compat_timespec __user *tp); | 502 | struct compat_timespec __user *tp); |
503 | asmlinkage long compat_sys_clock_adjtime(clockid_t which_clock, | 503 | asmlinkage long compat_sys_clock_adjtime(clockid_t which_clock, |
504 | struct compat_timex __user *tp); | 504 | struct compat_timex __user *tp); |
505 | asmlinkage long compat_sys_clock_getres(clockid_t which_clock, | 505 | asmlinkage long compat_sys_clock_getres(clockid_t which_clock, |
506 | struct compat_timespec __user *tp); | 506 | struct compat_timespec __user *tp); |
507 | asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags, | 507 | asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags, |
508 | struct compat_timespec __user *rqtp, | 508 | struct compat_timespec __user *rqtp, |
509 | struct compat_timespec __user *rmtp); | 509 | struct compat_timespec __user *rmtp); |
510 | asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese, | 510 | asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese, |
511 | struct compat_siginfo __user *uinfo, | 511 | struct compat_siginfo __user *uinfo, |
512 | struct compat_timespec __user *uts, compat_size_t sigsetsize); | 512 | struct compat_timespec __user *uts, compat_size_t sigsetsize); |
513 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, | 513 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, |
514 | compat_size_t sigsetsize); | 514 | compat_size_t sigsetsize); |
515 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); | 515 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); |
516 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, | 516 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, |
517 | unsigned long arg); | 517 | unsigned long arg); |
518 | asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val, | 518 | asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val, |
519 | struct compat_timespec __user *utime, u32 __user *uaddr2, | 519 | struct compat_timespec __user *utime, u32 __user *uaddr2, |
520 | u32 val3); | 520 | u32 val3); |
521 | asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, | 521 | asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, |
522 | char __user *optval, int __user *optlen); | 522 | char __user *optval, int __user *optlen); |
523 | asmlinkage long compat_sys_kexec_load(unsigned long entry, | 523 | asmlinkage long compat_sys_kexec_load(unsigned long entry, |
524 | unsigned long nr_segments, | 524 | unsigned long nr_segments, |
525 | struct compat_kexec_segment __user *, | 525 | struct compat_kexec_segment __user *, |
526 | unsigned long flags); | 526 | unsigned long flags); |
527 | asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes, | 527 | asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes, |
528 | const struct compat_mq_attr __user *u_mqstat, | 528 | const struct compat_mq_attr __user *u_mqstat, |
529 | struct compat_mq_attr __user *u_omqstat); | 529 | struct compat_mq_attr __user *u_omqstat); |
530 | asmlinkage long compat_sys_mq_notify(mqd_t mqdes, | 530 | asmlinkage long compat_sys_mq_notify(mqd_t mqdes, |
531 | const struct compat_sigevent __user *u_notification); | 531 | const struct compat_sigevent __user *u_notification); |
532 | asmlinkage long compat_sys_mq_open(const char __user *u_name, | 532 | asmlinkage long compat_sys_mq_open(const char __user *u_name, |
533 | int oflag, compat_mode_t mode, | 533 | int oflag, compat_mode_t mode, |
534 | struct compat_mq_attr __user *u_attr); | 534 | struct compat_mq_attr __user *u_attr); |
535 | asmlinkage long compat_sys_mq_timedsend(mqd_t mqdes, | 535 | asmlinkage long compat_sys_mq_timedsend(mqd_t mqdes, |
536 | const char __user *u_msg_ptr, | 536 | const char __user *u_msg_ptr, |
537 | size_t msg_len, unsigned int msg_prio, | 537 | size_t msg_len, unsigned int msg_prio, |
538 | const struct compat_timespec __user *u_abs_timeout); | 538 | const struct compat_timespec __user *u_abs_timeout); |
539 | asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes, | 539 | asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes, |
540 | char __user *u_msg_ptr, | 540 | char __user *u_msg_ptr, |
541 | size_t msg_len, unsigned int __user *u_msg_prio, | 541 | size_t msg_len, unsigned int __user *u_msg_prio, |
542 | const struct compat_timespec __user *u_abs_timeout); | 542 | const struct compat_timespec __user *u_abs_timeout); |
543 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); | 543 | asmlinkage long compat_sys_socketcall(int call, u32 __user *args); |
544 | asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args); | 544 | asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args); |
545 | 545 | ||
546 | extern ssize_t compat_rw_copy_check_uvector(int type, | 546 | extern ssize_t compat_rw_copy_check_uvector(int type, |
547 | const struct compat_iovec __user *uvector, | 547 | const struct compat_iovec __user *uvector, |
548 | unsigned long nr_segs, | 548 | unsigned long nr_segs, |
549 | unsigned long fast_segs, struct iovec *fast_pointer, | 549 | unsigned long fast_segs, struct iovec *fast_pointer, |
550 | struct iovec **ret_pointer, | 550 | struct iovec **ret_pointer, |
551 | int check_access); | 551 | int check_access); |
552 | 552 | ||
553 | extern void __user *compat_alloc_user_space(unsigned long len); | 553 | extern void __user *compat_alloc_user_space(unsigned long len); |
554 | 554 | ||
555 | asmlinkage ssize_t compat_sys_process_vm_readv(compat_pid_t pid, | 555 | asmlinkage ssize_t compat_sys_process_vm_readv(compat_pid_t pid, |
556 | const struct compat_iovec __user *lvec, | 556 | const struct compat_iovec __user *lvec, |
557 | unsigned long liovcnt, const struct compat_iovec __user *rvec, | 557 | unsigned long liovcnt, const struct compat_iovec __user *rvec, |
558 | unsigned long riovcnt, unsigned long flags); | 558 | unsigned long riovcnt, unsigned long flags); |
559 | asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid, | 559 | asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid, |
560 | const struct compat_iovec __user *lvec, | 560 | const struct compat_iovec __user *lvec, |
561 | unsigned long liovcnt, const struct compat_iovec __user *rvec, | 561 | unsigned long liovcnt, const struct compat_iovec __user *rvec, |
562 | unsigned long riovcnt, unsigned long flags); | 562 | unsigned long riovcnt, unsigned long flags); |
563 | 563 | ||
564 | #else | ||
565 | |||
566 | #define is_compat_task() (0) | ||
567 | |||
564 | #endif /* CONFIG_COMPAT */ | 568 | #endif /* CONFIG_COMPAT */ |
565 | #endif /* _LINUX_COMPAT_H */ | 569 | #endif /* _LINUX_COMPAT_H */ |
566 | 570 |