syscalls.h 55.6 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0-only */
L
Linus Torvalds 已提交
2 3 4 5 6 7 8 9 10 11
/*
 * syscalls.h - Linux syscall interfaces (non-arch-specific)
 *
 * Copyright (c) 2004 Randy Dunlap
 * Copyright (c) 2004 Open Source Development Labs
 */

#ifndef _LINUX_SYSCALLS_H
#define _LINUX_SYSCALLS_H

12
struct __aio_sigset;
L
Linus Torvalds 已提交
13 14 15 16 17 18 19 20 21 22 23 24
struct epoll_event;
struct iattr;
struct inode;
struct iocb;
struct io_event;
struct iovec;
struct itimerspec;
struct itimerval;
struct kexec_segment;
struct linux_dirent;
struct linux_dirent64;
struct list_head;
C
Christoph Hellwig 已提交
25
struct mmap_arg_struct;
L
Linus Torvalds 已提交
26
struct msgbuf;
27
struct user_msghdr;
28
struct mmsghdr;
L
Linus Torvalds 已提交
29 30 31 32
struct msqid_ds;
struct new_utsname;
struct nfsctl_arg;
struct __old_kernel_stat;
C
Christoph Hellwig 已提交
33 34
struct oldold_utsname;
struct old_utsname;
L
Linus Torvalds 已提交
35 36
struct pollfd;
struct rlimit;
37
struct rlimit64;
L
Linus Torvalds 已提交
38 39
struct rusage;
struct sched_param;
40
struct sched_attr;
C
Christoph Hellwig 已提交
41
struct sel_arg_struct;
L
Linus Torvalds 已提交
42 43 44 45 46 47 48 49
struct semaphore;
struct sembuf;
struct shmid_ds;
struct sockaddr;
struct stat;
struct stat64;
struct statfs;
struct statfs64;
50
struct statx;
L
Linus Torvalds 已提交
51 52 53 54
struct __sysctl_args;
struct sysinfo;
struct timespec;
struct timeval;
55
struct __kernel_timex;
L
Linus Torvalds 已提交
56 57 58 59
struct timezone;
struct tms;
struct utimbuf;
struct mq_attr;
60
struct compat_stat;
61
struct old_timeval32;
62
struct robust_list_head;
63
struct getcpu_cache;
64
struct old_linux_dirent;
65
struct perf_event_attr;
66
struct file_handle;
67
struct sigaltstack;
68
struct rseq;
69
union bpf_attr;
J
Jens Axboe 已提交
70
struct io_uring_params;
C
Christian Brauner 已提交
71
struct clone_args;
L
Linus Torvalds 已提交
72 73 74 75

#include <linux/types.h>
#include <linux/aio_abi.h>
#include <linux/capability.h>
76
#include <linux/signal.h>
L
Linus Torvalds 已提交
77
#include <linux/list.h>
78
#include <linux/bug.h>
L
Linus Torvalds 已提交
79 80
#include <linux/sem.h>
#include <asm/siginfo.h>
81
#include <linux/unistd.h>
L
Linus Torvalds 已提交
82 83
#include <linux/quota.h>
#include <linux/key.h>
M
Mark Rutland 已提交
84
#include <linux/personality.h>
85
#include <trace/syscall.h>
L
Linus Torvalds 已提交
86

87 88 89 90 91 92 93 94 95 96 97
#ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER
/*
 * It may be useful for an architecture to override the definitions of the
 * SYSCALL_DEFINE0() and __SYSCALL_DEFINEx() macros, in particular to use a
 * different calling convention for syscalls. To allow for that, the prototypes
 * for the sys_*() functions below will *not* be included if
 * CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled.
 */
#include <asm/syscall_wrapper.h>
#endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */

98 99 100 101 102 103 104 105 106
/*
 * __MAP - apply a macro to syscall arguments
 * __MAP(n, m, t1, a1, t2, a2, ..., tn, an) will expand to
 *    m(t1, a1), m(t2, a2), ..., m(tn, an)
 * The first argument must be equal to the amount of type/name
 * pairs given.  Note that this list of pairs (i.e. the arguments
 * of __MAP starting at the third one) is in the same format as
 * for SYSCALL_DEFINE<n>/COMPAT_SYSCALL_DEFINE<n>
 */
107
#define __MAP0(m,...)
108
#define __MAP1(m,t,a,...) m(t,a)
109 110 111 112 113 114 115 116
#define __MAP2(m,t,a,...) m(t,a), __MAP1(m,__VA_ARGS__)
#define __MAP3(m,t,a,...) m(t,a), __MAP2(m,__VA_ARGS__)
#define __MAP4(m,t,a,...) m(t,a), __MAP3(m,__VA_ARGS__)
#define __MAP5(m,t,a,...) m(t,a), __MAP4(m,__VA_ARGS__)
#define __MAP6(m,t,a,...) m(t,a), __MAP5(m,__VA_ARGS__)
#define __MAP(n,...) __MAP##n(__VA_ARGS__)

#define __SC_DECL(t, a)	t a
117 118 119 120
#define __TYPE_AS(t, v)	__same_type((__force t)0, v)
#define __TYPE_IS_L(t)	(__TYPE_AS(t, 0L))
#define __TYPE_IS_UL(t)	(__TYPE_AS(t, 0UL))
#define __TYPE_IS_LL(t) (__TYPE_AS(t, 0LL) || __TYPE_AS(t, 0ULL))
121
#define __SC_LONG(t, a) __typeof(__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)) a
122
#define __SC_CAST(t, a)	(__force t) a
123
#define __SC_ARGS(t, a)	a
124
#define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long))
125

126
#ifdef CONFIG_FTRACE_SYSCALLS
127 128
#define __SC_STR_ADECL(t, a)	#a
#define __SC_STR_TDECL(t, a)	#t
129

130 131
extern struct trace_event_class event_class_syscall_enter;
extern struct trace_event_class event_class_syscall_exit;
132 133
extern struct trace_event_functions enter_syscall_print_funcs;
extern struct trace_event_functions exit_syscall_print_funcs;
134

135
#define SYSCALL_TRACE_ENTER_EVENT(sname)				\
136
	static struct syscall_metadata __syscall_meta_##sname;		\
137
	static struct trace_event_call __used				\
138
	  event_enter_##sname = {					\
139
		.class			= &event_class_syscall_enter,	\
140 141 142
		{							\
			.name                   = "sys_enter"#sname,	\
		},							\
143
		.event.funcs            = &enter_syscall_print_funcs,	\
144
		.data			= (void *)&__syscall_meta_##sname,\
145
		.flags                  = TRACE_EVENT_FL_CAP_ANY,	\
146
	};								\
147
	static struct trace_event_call __used				\
148
	  __attribute__((section("_ftrace_events")))			\
149
	 *__event_enter_##sname = &event_enter_##sname;
150 151

#define SYSCALL_TRACE_EXIT_EVENT(sname)					\
152
	static struct syscall_metadata __syscall_meta_##sname;		\
153
	static struct trace_event_call __used				\
154
	  event_exit_##sname = {					\
155
		.class			= &event_class_syscall_exit,	\
156 157 158
		{							\
			.name                   = "sys_exit"#sname,	\
		},							\
159
		.event.funcs		= &exit_syscall_print_funcs,	\
160
		.data			= (void *)&__syscall_meta_##sname,\
161
		.flags                  = TRACE_EVENT_FL_CAP_ANY,	\
162
	};								\
163
	static struct trace_event_call __used				\
164
	  __attribute__((section("_ftrace_events")))			\
165
	*__event_exit_##sname = &event_exit_##sname;
166

167 168 169 170 171 172 173
#define SYSCALL_METADATA(sname, nb, ...)			\
	static const char *types_##sname[] = {			\
		__MAP(nb,__SC_STR_TDECL,__VA_ARGS__)		\
	};							\
	static const char *args_##sname[] = {			\
		__MAP(nb,__SC_STR_ADECL,__VA_ARGS__)		\
	};							\
174 175
	SYSCALL_TRACE_ENTER_EVENT(sname);			\
	SYSCALL_TRACE_EXIT_EVENT(sname);			\
176
	static struct syscall_metadata __used			\
177 178
	  __syscall_meta_##sname = {				\
		.name 		= "sys"#sname,			\
179
		.syscall_nr	= -1,	/* Filled in at boot */	\
180
		.nb_args 	= nb,				\
181 182
		.types		= nb ? types_##sname : NULL,	\
		.args		= nb ? args_##sname : NULL,	\
183 184
		.enter_event	= &event_enter_##sname,		\
		.exit_event	= &event_exit_##sname,		\
185
		.enter_fields	= LIST_HEAD_INIT(__syscall_meta_##sname.enter_fields), \
186 187 188 189
	};							\
	static struct syscall_metadata __used			\
	  __attribute__((section("__syscalls_metadata")))	\
	 *__p_syscall_meta_##sname = &__syscall_meta_##sname;
190 191 192 193 194 195 196

static inline int is_syscall_trace_event(struct trace_event_call *tp_event)
{
	return tp_event->class == &event_class_syscall_enter ||
	       tp_event->class == &event_class_syscall_exit;
}

197 198
#else
#define SYSCALL_METADATA(sname, nb, ...)
199 200 201 202 203

static inline int is_syscall_trace_event(struct trace_event_call *tp_event)
{
	return 0;
}
204
#endif
205

206
#ifndef SYSCALL_DEFINE0
207
#define SYSCALL_DEFINE0(sname)					\
208
	SYSCALL_METADATA(_##sname, 0);				\
209 210
	asmlinkage long sys_##sname(void);			\
	ALLOW_ERROR_INJECTION(sys_##sname, ERRNO);		\
211
	asmlinkage long sys_##sname(void)
212
#endif /* SYSCALL_DEFINE0 */
213

214 215 216 217 218 219
#define SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
220

221 222
#define SYSCALL_DEFINE_MAXARGS	6

223
#define SYSCALL_DEFINEx(x, sname, ...)				\
224
	SYSCALL_METADATA(sname, x, __VA_ARGS__)			\
225 226
	__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)

227
#define __PROTECT(...) asmlinkage_protect(__VA_ARGS__)
228

229 230 231 232 233
/*
 * The asmlinkage stub is aliased to a function named __se_sys_*() which
 * sign-extends 32-bit ints to longs whenever needed. The actual work is
 * done within __do_sys_*().
 */
234
#ifndef __SYSCALL_DEFINEx
235
#define __SYSCALL_DEFINEx(x, name, ...)					\
236 237 238
	__diag_push();							\
	__diag_ignore(GCC, 8, "-Wattribute-alias",			\
		      "Type aliasing is used to sanitize syscall arguments");\
239
	asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))	\
240
		__attribute__((alias(__stringify(__se_sys##name))));	\
241
	ALLOW_ERROR_INJECTION(sys##name, ERRNO);			\
242 243 244
	static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
	asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__));	\
	asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))	\
245
	{								\
246
		long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__));\
247
		__MAP(x,__SC_TEST,__VA_ARGS__);				\
248 249
		__PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__));	\
		return ret;						\
250
	}								\
251
	__diag_pop();							\
252
	static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))
253
#endif /* __SYSCALL_DEFINEx */
254

255 256 257 258 259 260
/*
 * Called before coming back to user-mode. Returning to user-mode with an
 * address limit different than USER_DS can allow to overwrite kernel memory.
 */
static inline void addr_limit_user_check(void)
{
261
#ifdef TIF_FSCHECK
262 263
	if (!test_thread_flag(TIF_FSCHECK))
		return;
264
#endif
265

266 267
	if (CHECK_DATA_CORRUPTION(!segment_eq(get_fs(), USER_DS),
				  "Invalid address limit on user-mode return"))
268
		force_sig(SIGKILL);
269 270

#ifdef TIF_FSCHECK
271 272
	clear_thread_flag(TIF_FSCHECK);
#endif
273
}
274

275 276 277 278 279 280 281 282
/*
 * These syscall function prototypes are kept in the same order as
 * include/uapi/asm-generic/unistd.h. Architecture specific entries go below,
 * followed by deprecated or obsolete system calls.
 *
 * Please note that these prototypes here are only provided for information
 * purposes, for static analysis, and for linking from the syscall table.
 * These functions should not be called elsewhere from kernel code.
283 284 285 286
 *
 * As the syscall calling convention may be different from the default
 * for architectures overriding the syscall calling convention, do not
 * include the prototypes if CONFIG_ARCH_HAS_SYSCALL_WRAPPER is enabled.
287
 */
288
#ifndef CONFIG_ARCH_HAS_SYSCALL_WRAPPER
289 290 291 292 293 294 295 296 297 298
asmlinkage long sys_io_setup(unsigned nr_reqs, aio_context_t __user *ctx);
asmlinkage long sys_io_destroy(aio_context_t ctx);
asmlinkage long sys_io_submit(aio_context_t, long,
			struct iocb __user * __user *);
asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
			      struct io_event __user *result);
asmlinkage long sys_io_getevents(aio_context_t ctx_id,
				long min_nr,
				long nr,
				struct io_event __user *events,
299
				struct __kernel_timespec __user *timeout);
300 301 302 303 304
asmlinkage long sys_io_getevents_time32(__u32 ctx_id,
				__s32 min_nr,
				__s32 nr,
				struct io_event __user *events,
				struct old_timespec32 __user *timeout);
C
Christoph Hellwig 已提交
305 306 307 308
asmlinkage long sys_io_pgetevents(aio_context_t ctx_id,
				long min_nr,
				long nr,
				struct io_event __user *events,
309 310 311 312 313 314 315
				struct __kernel_timespec __user *timeout,
				const struct __aio_sigset *sig);
asmlinkage long sys_io_pgetevents_time32(aio_context_t ctx_id,
				long min_nr,
				long nr,
				struct io_event __user *events,
				struct old_timespec32 __user *timeout,
C
Christoph Hellwig 已提交
316
				const struct __aio_sigset *sig);
J
Jens Axboe 已提交
317 318 319 320 321
asmlinkage long sys_io_uring_setup(u32 entries,
				struct io_uring_params __user *p);
asmlinkage long sys_io_uring_enter(unsigned int fd, u32 to_submit,
				u32 min_complete, u32 flags,
				const sigset_t __user *sig, size_t sigsz);
322 323
asmlinkage long sys_io_uring_register(unsigned int fd, unsigned int op,
				void __user *arg, unsigned int nr_args);
L
Linus Torvalds 已提交
324

325
/* fs/xattr.c */
326 327 328 329 330 331
asmlinkage long sys_setxattr(const char __user *path, const char __user *name,
			     const void __user *value, size_t size, int flags);
asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name,
			      const void __user *value, size_t size, int flags);
asmlinkage long sys_fsetxattr(int fd, const char __user *name,
			      const void __user *value, size_t size, int flags);
332 333 334 335 336 337 338 339 340 341 342
asmlinkage long sys_getxattr(const char __user *path, const char __user *name,
			     void __user *value, size_t size);
asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name,
			      void __user *value, size_t size);
asmlinkage long sys_fgetxattr(int fd, const char __user *name,
			      void __user *value, size_t size);
asmlinkage long sys_listxattr(const char __user *path, char __user *list,
			      size_t size);
asmlinkage long sys_llistxattr(const char __user *path, char __user *list,
			       size_t size);
asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size);
343 344 345 346 347
asmlinkage long sys_removexattr(const char __user *path,
				const char __user *name);
asmlinkage long sys_lremovexattr(const char __user *path,
				 const char __user *name);
asmlinkage long sys_fremovexattr(int fd, const char __user *name);
L
Linus Torvalds 已提交
348

349 350
/* fs/dcache.c */
asmlinkage long sys_getcwd(char __user *buf, unsigned long size);
L
Linus Torvalds 已提交
351

352 353 354 355 356
/* fs/cookies.c */
asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user *buf, size_t len);

/* fs/eventfd.c */
asmlinkage long sys_eventfd2(unsigned int count, int flags);
L
Linus Torvalds 已提交
357

358 359 360 361 362 363 364 365 366 367 368 369
/* fs/eventpoll.c */
asmlinkage long sys_epoll_create1(int flags);
asmlinkage long sys_epoll_ctl(int epfd, int op, int fd,
				struct epoll_event __user *event);
asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events,
				int maxevents, int timeout,
				const sigset_t __user *sigmask,
				size_t sigsetsize);

/* fs/fcntl.c */
asmlinkage long sys_dup(unsigned int fildes);
asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags);
L
Linus Torvalds 已提交
370 371 372 373 374
asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
#if BITS_PER_LONG == 32
asmlinkage long sys_fcntl64(unsigned int fd,
				unsigned int cmd, unsigned long arg);
#endif
375 376 377 378 379 380 381 382

/* fs/inotify_user.c */
asmlinkage long sys_inotify_init1(int flags);
asmlinkage long sys_inotify_add_watch(int fd, const char __user *path,
					u32 mask);
asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd);

/* fs/ioctl.c */
L
Linus Torvalds 已提交
383 384
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd,
				unsigned long arg);
385 386 387 388 389 390

/* fs/ioprio.c */
asmlinkage long sys_ioprio_set(int which, int who, int ioprio);
asmlinkage long sys_ioprio_get(int which, int who);

/* fs/locks.c */
L
Linus Torvalds 已提交
391
asmlinkage long sys_flock(unsigned int fd, unsigned int cmd);
392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441

/* fs/namei.c */
asmlinkage long sys_mknodat(int dfd, const char __user * filename, umode_t mode,
			    unsigned dev);
asmlinkage long sys_mkdirat(int dfd, const char __user * pathname, umode_t mode);
asmlinkage long sys_unlinkat(int dfd, const char __user * pathname, int flag);
asmlinkage long sys_symlinkat(const char __user * oldname,
			      int newdfd, const char __user * newname);
asmlinkage long sys_linkat(int olddfd, const char __user *oldname,
			   int newdfd, const char __user *newname, int flags);
asmlinkage long sys_renameat(int olddfd, const char __user * oldname,
			     int newdfd, const char __user * newname);

/* fs/namespace.c */
asmlinkage long sys_umount(char __user *name, int flags);
asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name,
				char __user *type, unsigned long flags,
				void __user *data);
asmlinkage long sys_pivot_root(const char __user *new_root,
				const char __user *put_old);

/* fs/nfsctl.c */

/* fs/open.c */
asmlinkage long sys_statfs(const char __user * path,
				struct statfs __user *buf);
asmlinkage long sys_statfs64(const char __user *path, size_t sz,
				struct statfs64 __user *buf);
asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user *buf);
asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz,
				struct statfs64 __user *buf);
asmlinkage long sys_truncate(const char __user *path, long length);
asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length);
#if BITS_PER_LONG == 32
asmlinkage long sys_truncate64(const char __user *path, loff_t length);
asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length);
#endif
asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len);
asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode);
asmlinkage long sys_chdir(const char __user *filename);
asmlinkage long sys_fchdir(unsigned int fd);
asmlinkage long sys_chroot(const char __user *filename);
asmlinkage long sys_fchmod(unsigned int fd, umode_t mode);
asmlinkage long sys_fchmodat(int dfd, const char __user * filename,
			     umode_t mode);
asmlinkage long sys_fchownat(int dfd, const char __user *filename, uid_t user,
			     gid_t group, int flag);
asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group);
asmlinkage long sys_openat(int dfd, const char __user *filename, int flags,
			   umode_t mode);
L
Linus Torvalds 已提交
442 443 444
asmlinkage long sys_close(unsigned int fd);
asmlinkage long sys_vhangup(void);

445 446 447 448 449 450 451 452 453 454 455 456 457
/* fs/pipe.c */
asmlinkage long sys_pipe2(int __user *fildes, int flags);

/* fs/quota.c */
asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special,
				qid_t id, void __user *addr);

/* fs/readdir.c */
asmlinkage long sys_getdents64(unsigned int fd,
				struct linux_dirent64 __user *dirent,
				unsigned int count);

/* fs/read_write.c */
L
Linus Torvalds 已提交
458 459
asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
			unsigned long offset_low, loff_t __user *result,
460
			unsigned int whence);
461 462
asmlinkage long sys_lseek(unsigned int fd, off_t offset,
			  unsigned int whence);
463
asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count);
464 465
asmlinkage long sys_write(unsigned int fd, const char __user *buf,
			  size_t count);
466 467 468 469 470 471 472 473 474 475
asmlinkage long sys_readv(unsigned long fd,
			  const struct iovec __user *vec,
			  unsigned long vlen);
asmlinkage long sys_writev(unsigned long fd,
			   const struct iovec __user *vec,
			   unsigned long vlen);
asmlinkage long sys_pread64(unsigned int fd, char __user *buf,
			    size_t count, loff_t pos);
asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf,
			     size_t count, loff_t pos);
476
asmlinkage long sys_preadv(unsigned long fd, const struct iovec __user *vec,
477
			   unsigned long vlen, unsigned long pos_l, unsigned long pos_h);
478
asmlinkage long sys_pwritev(unsigned long fd, const struct iovec __user *vec,
479
			    unsigned long vlen, unsigned long pos_l, unsigned long pos_h);
L
Linus Torvalds 已提交
480

481 482 483 484 485 486
/* fs/sendfile.c */
asmlinkage long sys_sendfile64(int out_fd, int in_fd,
			       loff_t __user *offset, size_t count);

/* fs/select.c */
asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *,
D
Deepa Dinamani 已提交
487 488 489 490
			     fd_set __user *, struct __kernel_timespec __user *,
			     void __user *);
asmlinkage long sys_pselect6_time32(int, fd_set __user *, fd_set __user *,
			     fd_set __user *, struct old_timespec32 __user *,
491 492
			     void __user *);
asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int,
D
Deepa Dinamani 已提交
493 494 495 496
			  struct __kernel_timespec __user *, const sigset_t __user *,
			  size_t);
asmlinkage long sys_ppoll_time32(struct pollfd __user *, unsigned int,
			  struct old_timespec32 __user *, const sigset_t __user *,
497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533
			  size_t);

/* fs/signalfd.c */
asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask, size_t sizemask, int flags);

/* fs/splice.c */
asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov,
			     unsigned long nr_segs, unsigned int flags);
asmlinkage long sys_splice(int fd_in, loff_t __user *off_in,
			   int fd_out, loff_t __user *off_out,
			   size_t len, unsigned int flags);
asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags);

/* fs/stat.c */
asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *buf,
			       int bufsiz);
asmlinkage long sys_newfstatat(int dfd, const char __user *filename,
			       struct stat __user *statbuf, int flag);
asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf);
#if defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_COMPAT_STAT64)
asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user *statbuf);
asmlinkage long sys_fstatat64(int dfd, const char __user *filename,
			       struct stat64 __user *statbuf, int flag);
#endif

/* fs/sync.c */
asmlinkage long sys_sync(void);
asmlinkage long sys_fsync(unsigned int fd);
asmlinkage long sys_fdatasync(unsigned int fd);
asmlinkage long sys_sync_file_range2(int fd, unsigned int flags,
				     loff_t offset, loff_t nbytes);
asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
					unsigned int flags);

/* fs/timerfd.c */
asmlinkage long sys_timerfd_create(int clockid, int flags);
asmlinkage long sys_timerfd_settime(int ufd, int flags,
534 535 536
				    const struct __kernel_itimerspec __user *utmr,
				    struct __kernel_itimerspec __user *otmr);
asmlinkage long sys_timerfd_gettime(int ufd, struct __kernel_itimerspec __user *otmr);
537 538 539 540 541
asmlinkage long sys_timerfd_gettime32(int ufd,
				   struct old_itimerspec32 __user *otmr);
asmlinkage long sys_timerfd_settime32(int ufd, int flags,
				   const struct old_itimerspec32 __user *utmr,
				   struct old_itimerspec32 __user *otmr);
542 543 544

/* fs/utimes.c */
asmlinkage long sys_utimensat(int dfd, const char __user *filename,
545 546
				struct __kernel_timespec __user *utimes,
				int flags);
547 548 549
asmlinkage long sys_utimensat_time32(unsigned int dfd,
				const char __user *filename,
				struct old_timespec32 __user *t, int flags);
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575

/* kernel/acct.c */
asmlinkage long sys_acct(const char __user *name);

/* kernel/capability.c */
asmlinkage long sys_capget(cap_user_header_t header,
				cap_user_data_t dataptr);
asmlinkage long sys_capset(cap_user_header_t header,
				const cap_user_data_t data);

/* kernel/exec_domain.c */
asmlinkage long sys_personality(unsigned int personality);

/* kernel/exit.c */
asmlinkage long sys_exit(int error_code);
asmlinkage long sys_exit_group(int error_code);
asmlinkage long sys_waitid(int which, pid_t pid,
			   struct siginfo __user *infop,
			   int options, struct rusage __user *ru);

/* kernel/fork.c */
asmlinkage long sys_set_tid_address(int __user *tidptr);
asmlinkage long sys_unshare(unsigned long unshare_flags);

/* kernel/futex.c */
asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val,
576
			struct __kernel_timespec __user *utime, u32 __user *uaddr2,
577
			u32 val3);
578 579 580
asmlinkage long sys_futex_time32(u32 __user *uaddr, int op, u32 val,
			struct old_timespec32 __user *utime, u32 __user *uaddr2,
			u32 val3);
581 582 583 584 585 586 587
asmlinkage long sys_get_robust_list(int pid,
				    struct robust_list_head __user * __user *head_ptr,
				    size_t __user *len_ptr);
asmlinkage long sys_set_robust_list(struct robust_list_head __user *head,
				    size_t len);

/* kernel/hrtimer.c */
588 589
asmlinkage long sys_nanosleep(struct __kernel_timespec __user *rqtp,
			      struct __kernel_timespec __user *rmtp);
590 591
asmlinkage long sys_nanosleep_time32(struct old_timespec32 __user *rqtp,
				     struct old_timespec32 __user *rmtp);
592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614

/* kernel/itimer.c */
asmlinkage long sys_getitimer(int which, struct itimerval __user *value);
asmlinkage long sys_setitimer(int which,
				struct itimerval __user *value,
				struct itimerval __user *ovalue);

/* kernel/kexec.c */
asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments,
				struct kexec_segment __user *segments,
				unsigned long flags);

/* kernel/module.c */
asmlinkage long sys_init_module(void __user *umod, unsigned long len,
				const char __user *uargs);
asmlinkage long sys_delete_module(const char __user *name_user,
				unsigned int flags);

/* kernel/posix-timers.c */
asmlinkage long sys_timer_create(clockid_t which_clock,
				 struct sigevent __user *timer_event_spec,
				 timer_t __user * created_timer_id);
asmlinkage long sys_timer_gettime(timer_t timer_id,
615
				struct __kernel_itimerspec __user *setting);
616 617
asmlinkage long sys_timer_getoverrun(timer_t timer_id);
asmlinkage long sys_timer_settime(timer_t timer_id, int flags,
618
				const struct __kernel_itimerspec __user *new_setting,
619
				struct __kernel_itimerspec __user *old_setting);
620 621
asmlinkage long sys_timer_delete(timer_t timer_id);
asmlinkage long sys_clock_settime(clockid_t which_clock,
622
				const struct __kernel_timespec __user *tp);
623
asmlinkage long sys_clock_gettime(clockid_t which_clock,
624
				struct __kernel_timespec __user *tp);
625
asmlinkage long sys_clock_getres(clockid_t which_clock,
626
				struct __kernel_timespec __user *tp);
627
asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags,
628 629
				const struct __kernel_timespec __user *rqtp,
				struct __kernel_timespec __user *rmtp);
630 631 632 633 634 635 636 637 638 639 640 641 642 643
asmlinkage long sys_timer_gettime32(timer_t timer_id,
				 struct old_itimerspec32 __user *setting);
asmlinkage long sys_timer_settime32(timer_t timer_id, int flags,
					 struct old_itimerspec32 __user *new,
					 struct old_itimerspec32 __user *old);
asmlinkage long sys_clock_settime32(clockid_t which_clock,
				struct old_timespec32 __user *tp);
asmlinkage long sys_clock_gettime32(clockid_t which_clock,
				struct old_timespec32 __user *tp);
asmlinkage long sys_clock_getres_time32(clockid_t which_clock,
				struct old_timespec32 __user *tp);
asmlinkage long sys_clock_nanosleep_time32(clockid_t which_clock, int flags,
				struct old_timespec32 __user *rqtp,
				struct old_timespec32 __user *rmtp);
644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667

/* kernel/printk.c */
asmlinkage long sys_syslog(int type, char __user *buf, int len);

/* kernel/ptrace.c */
asmlinkage long sys_ptrace(long request, long pid, unsigned long addr,
			   unsigned long data);
/* kernel/sched/core.c */

asmlinkage long sys_sched_setparam(pid_t pid,
					struct sched_param __user *param);
asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
					struct sched_param __user *param);
asmlinkage long sys_sched_getscheduler(pid_t pid);
asmlinkage long sys_sched_getparam(pid_t pid,
					struct sched_param __user *param);
asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len,
					unsigned long __user *user_mask_ptr);
asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len,
					unsigned long __user *user_mask_ptr);
asmlinkage long sys_sched_yield(void);
asmlinkage long sys_sched_get_priority_max(int policy);
asmlinkage long sys_sched_get_priority_min(int policy);
asmlinkage long sys_sched_rr_get_interval(pid_t pid,
668
				struct __kernel_timespec __user *interval);
669 670
asmlinkage long sys_sched_rr_get_interval_time32(pid_t pid,
						 struct old_timespec32 __user *interval);
671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690

/* kernel/signal.c */
asmlinkage long sys_restart_syscall(void);
asmlinkage long sys_kill(pid_t pid, int sig);
asmlinkage long sys_tkill(pid_t pid, int sig);
asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig);
asmlinkage long sys_sigaltstack(const struct sigaltstack __user *uss,
				struct sigaltstack __user *uoss);
asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize);
#ifndef CONFIG_ODD_RT_SIGACTION
asmlinkage long sys_rt_sigaction(int,
				 const struct sigaction __user *,
				 struct sigaction __user *,
				 size_t);
#endif
asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set,
				sigset_t __user *oset, size_t sigsetsize);
asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize);
asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese,
				siginfo_t __user *uinfo,
691
				const struct __kernel_timespec __user *uts,
D
Davide Libenzi 已提交
692
				size_t sigsetsize);
693 694 695 696
asmlinkage long sys_rt_sigtimedwait_time32(const sigset_t __user *uthese,
				siginfo_t __user *uinfo,
				const struct old_timespec32 __user *uts,
				size_t sigsetsize);
697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
asmlinkage long sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo);

/* kernel/sys.c */
asmlinkage long sys_setpriority(int which, int who, int niceval);
asmlinkage long sys_getpriority(int which, int who);
asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd,
				void __user *arg);
asmlinkage long sys_setregid(gid_t rgid, gid_t egid);
asmlinkage long sys_setgid(gid_t gid);
asmlinkage long sys_setreuid(uid_t ruid, uid_t euid);
asmlinkage long sys_setuid(uid_t uid);
asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid);
asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid);
asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid);
asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid);
asmlinkage long sys_setfsuid(uid_t uid);
asmlinkage long sys_setfsgid(gid_t gid);
asmlinkage long sys_times(struct tms __user *tbuf);
asmlinkage long sys_setpgid(pid_t pid, pid_t pgid);
asmlinkage long sys_getpgid(pid_t pid);
asmlinkage long sys_getsid(pid_t pid);
asmlinkage long sys_setsid(void);
asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist);
asmlinkage long sys_setgroups(int gidsetsize, gid_t __user *grouplist);
asmlinkage long sys_newuname(struct new_utsname __user *name);
L
Linus Torvalds 已提交
722 723 724 725 726 727 728 729
asmlinkage long sys_sethostname(char __user *name, int len);
asmlinkage long sys_setdomainname(char __user *name, int len);
asmlinkage long sys_getrlimit(unsigned int resource,
				struct rlimit __user *rlim);
asmlinkage long sys_setrlimit(unsigned int resource,
				struct rlimit __user *rlim);
asmlinkage long sys_getrusage(int who, struct rusage __user *ru);
asmlinkage long sys_umask(int mask);
730 731 732 733 734 735 736 737 738
asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3,
			unsigned long arg4, unsigned long arg5);
asmlinkage long sys_getcpu(unsigned __user *cpu, unsigned __user *node, struct getcpu_cache __user *cache);

/* kernel/time.c */
asmlinkage long sys_gettimeofday(struct timeval __user *tv,
				struct timezone __user *tz);
asmlinkage long sys_settimeofday(struct timeval __user *tv,
				struct timezone __user *tz);
739
asmlinkage long sys_adjtimex(struct __kernel_timex __user *txc_p);
740
asmlinkage long sys_adjtimex_time32(struct old_timex32 __user *txc_p);
741 742 743 744 745 746 747 748 749 750 751 752 753 754

/* kernel/timer.c */
asmlinkage long sys_getpid(void);
asmlinkage long sys_getppid(void);
asmlinkage long sys_getuid(void);
asmlinkage long sys_geteuid(void);
asmlinkage long sys_getgid(void);
asmlinkage long sys_getegid(void);
asmlinkage long sys_gettid(void);
asmlinkage long sys_sysinfo(struct sysinfo __user *info);

/* ipc/mqueue.c */
asmlinkage long sys_mq_open(const char __user *name, int oflag, umode_t mode, struct mq_attr __user *attr);
asmlinkage long sys_mq_unlink(const char __user *name);
755 756
asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct __kernel_timespec __user *abs_timeout);
asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct __kernel_timespec __user *abs_timeout);
757 758
asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);
asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat);
759 760 761 762 763 764 765 766
asmlinkage long sys_mq_timedreceive_time32(mqd_t mqdes,
			char __user *u_msg_ptr,
			unsigned int msg_len, unsigned int __user *u_msg_prio,
			const struct old_timespec32 __user *u_abs_timeout);
asmlinkage long sys_mq_timedsend_time32(mqd_t mqdes,
			const char __user *u_msg_ptr,
			unsigned int msg_len, unsigned int msg_prio,
			const struct old_timespec32 __user *u_abs_timeout);
L
Linus Torvalds 已提交
767

768
/* ipc/msg.c */
L
Linus Torvalds 已提交
769
asmlinkage long sys_msgget(key_t key, int msgflg);
770
asmlinkage long sys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
771
asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
L
Linus Torvalds 已提交
772 773
asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp,
				size_t msgsz, long msgtyp, int msgflg);
774 775
asmlinkage long sys_msgsnd(int msqid, struct msgbuf __user *msgp,
				size_t msgsz, int msgflg);
L
Linus Torvalds 已提交
776

777
/* ipc/sem.c */
L
Linus Torvalds 已提交
778
asmlinkage long sys_semget(key_t key, int nsems, int semflg);
779
asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg);
780
asmlinkage long sys_old_semctl(int semid, int semnum, int cmd, unsigned long arg);
L
Linus Torvalds 已提交
781 782
asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops,
				unsigned nsops,
783
				const struct __kernel_timespec __user *timeout);
784 785 786
asmlinkage long sys_semtimedop_time32(int semid, struct sembuf __user *sops,
				unsigned nsops,
				const struct old_timespec32 __user *timeout);
787 788 789 790
asmlinkage long sys_semop(int semid, struct sembuf __user *sops,
				unsigned nsops);

/* ipc/shm.c */
L
Linus Torvalds 已提交
791
asmlinkage long sys_shmget(key_t key, size_t size, int flag);
792
asmlinkage long sys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
L
Linus Torvalds 已提交
793
asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
794 795
asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg);
asmlinkage long sys_shmdt(char __user *shmaddr);
L
Linus Torvalds 已提交
796

797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816
/* net/socket.c */
asmlinkage long sys_socket(int, int, int);
asmlinkage long sys_socketpair(int, int, int, int __user *);
asmlinkage long sys_bind(int, struct sockaddr __user *, int);
asmlinkage long sys_listen(int, int);
asmlinkage long sys_accept(int, struct sockaddr __user *, int __user *);
asmlinkage long sys_connect(int, struct sockaddr __user *, int);
asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *);
asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *);
asmlinkage long sys_sendto(int, void __user *, size_t, unsigned,
				struct sockaddr __user *, int);
asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned,
				struct sockaddr __user *, int __user *);
asmlinkage long sys_setsockopt(int fd, int level, int optname,
				char __user *optval, int optlen);
asmlinkage long sys_getsockopt(int fd, int level, int optname,
				char __user *optval, int __user *optlen);
asmlinkage long sys_shutdown(int, int);
asmlinkage long sys_sendmsg(int fd, struct user_msghdr __user *msg, unsigned flags);
asmlinkage long sys_recvmsg(int fd, struct user_msghdr __user *msg, unsigned flags);
L
Linus Torvalds 已提交
817

818 819
/* mm/filemap.c */
asmlinkage long sys_readahead(int fd, loff_t offset, size_t count);
L
Linus Torvalds 已提交
820

821 822 823 824 825 826
/* mm/nommu.c, also with MMU */
asmlinkage long sys_brk(unsigned long brk);
asmlinkage long sys_munmap(unsigned long addr, size_t len);
asmlinkage long sys_mremap(unsigned long addr,
			   unsigned long old_len, unsigned long new_len,
			   unsigned long flags, unsigned long new_addr);
L
Linus Torvalds 已提交
827

828
/* security/keys/keyctl.c */
L
Linus Torvalds 已提交
829 830 831 832 833 834 835 836 837 838 839 840
asmlinkage long sys_add_key(const char __user *_type,
			    const char __user *_description,
			    const void __user *_payload,
			    size_t plen,
			    key_serial_t destringid);
asmlinkage long sys_request_key(const char __user *_type,
				const char __user *_description,
				const char __user *_callout_info,
				key_serial_t destringid);
asmlinkage long sys_keyctl(int cmd, unsigned long arg2, unsigned long arg3,
			   unsigned long arg4, unsigned long arg5);

841
/* arch/example/kernel/sys_example.c */
842
#ifdef CONFIG_CLONE_BACKWARDS
843
asmlinkage long sys_clone(unsigned long, unsigned long, int __user *, unsigned long,
844 845
	       int __user *);
#else
M
Michal Simek 已提交
846 847
#ifdef CONFIG_CLONE_BACKWARDS3
asmlinkage long sys_clone(unsigned long, unsigned long, int, int __user *,
848
			  int __user *, unsigned long);
M
Michal Simek 已提交
849
#else
850
asmlinkage long sys_clone(unsigned long, unsigned long, int __user *,
851
	       int __user *, unsigned long);
852
#endif
M
Michal Simek 已提交
853
#endif
C
Christian Brauner 已提交
854 855 856

asmlinkage long sys_clone3(struct clone_args __user *uargs, size_t size);

A
Al Viro 已提交
857 858 859
asmlinkage long sys_execve(const char __user *filename,
		const char __user *const __user *argv,
		const char __user *const __user *envp);
I
Ingo Molnar 已提交
860

861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901
/* mm/fadvise.c */
asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice);

/* mm/, CONFIG_MMU only */
asmlinkage long sys_swapon(const char __user *specialfile, int swap_flags);
asmlinkage long sys_swapoff(const char __user *specialfile);
asmlinkage long sys_mprotect(unsigned long start, size_t len,
				unsigned long prot);
asmlinkage long sys_msync(unsigned long start, size_t len, int flags);
asmlinkage long sys_mlock(unsigned long start, size_t len);
asmlinkage long sys_munlock(unsigned long start, size_t len);
asmlinkage long sys_mlockall(int flags);
asmlinkage long sys_munlockall(void);
asmlinkage long sys_mincore(unsigned long start, size_t len,
				unsigned char __user * vec);
asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior);
asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
			unsigned long prot, unsigned long pgoff,
			unsigned long flags);
asmlinkage long sys_mbind(unsigned long start, unsigned long len,
				unsigned long mode,
				const unsigned long __user *nmask,
				unsigned long maxnode,
				unsigned flags);
asmlinkage long sys_get_mempolicy(int __user *policy,
				unsigned long __user *nmask,
				unsigned long maxnode,
				unsigned long addr, unsigned long flags);
asmlinkage long sys_set_mempolicy(int mode, const unsigned long __user *nmask,
				unsigned long maxnode);
asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode,
				const unsigned long __user *from,
				const unsigned long __user *to);
asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages,
				const void __user * __user *pages,
				const int __user *nodes,
				int __user *status,
				int flags);

asmlinkage long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t  pid, int sig,
		siginfo_t __user *uinfo);
902 903
asmlinkage long sys_perf_event_open(
		struct perf_event_attr __user *attr_uptr,
904
		pid_t pid, int cpu, int group_fd, unsigned long flags);
905 906 907
asmlinkage long sys_accept4(int, struct sockaddr __user *, int __user *, int);
asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg,
			     unsigned int vlen, unsigned flags,
908
			     struct __kernel_timespec __user *timeout);
909 910 911
asmlinkage long sys_recvmmsg_time32(int fd, struct mmsghdr __user *msg,
			     unsigned int vlen, unsigned flags,
			     struct old_timespec32 __user *timeout);
A
Al Viro 已提交
912

913 914 915 916 917 918 919 920 921
asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,
				int options, struct rusage __user *ru);
asmlinkage long sys_prlimit64(pid_t pid, unsigned int resource,
				const struct rlimit64 __user *new_rlim,
				struct rlimit64 __user *old_rlim);
asmlinkage long sys_fanotify_init(unsigned int flags, unsigned int event_f_flags);
asmlinkage long sys_fanotify_mark(int fanotify_fd, unsigned int flags,
				  u64 mask, int fd,
				  const char  __user *pathname);
922 923 924
asmlinkage long sys_name_to_handle_at(int dfd, const char __user *name,
				      struct file_handle __user *handle,
				      int __user *mnt_id, int flag);
925 926 927
asmlinkage long sys_open_by_handle_at(int mountdirfd,
				      struct file_handle __user *handle,
				      int flags);
928
asmlinkage long sys_clock_adjtime(clockid_t which_clock,
929
				struct __kernel_timex __user *tx);
930 931
asmlinkage long sys_clock_adjtime32(clockid_t which_clock,
				struct old_timex32 __user *tx);
932
asmlinkage long sys_syncfs(int fd);
933
asmlinkage long sys_setns(int fd, int nstype);
C
Christian Brauner 已提交
934
asmlinkage long sys_pidfd_open(pid_t pid, unsigned int flags);
935 936
asmlinkage long sys_sendmmsg(int fd, struct mmsghdr __user *msg,
			     unsigned int vlen, unsigned flags);
C
Christopher Yeoh 已提交
937 938 939 940 941 942 943 944 945 946 947 948
asmlinkage long sys_process_vm_readv(pid_t pid,
				     const struct iovec __user *lvec,
				     unsigned long liovcnt,
				     const struct iovec __user *rvec,
				     unsigned long riovcnt,
				     unsigned long flags);
asmlinkage long sys_process_vm_writev(pid_t pid,
				      const struct iovec __user *lvec,
				      unsigned long liovcnt,
				      const struct iovec __user *rvec,
				      unsigned long riovcnt,
				      unsigned long flags);
949 950
asmlinkage long sys_kcmp(pid_t pid1, pid_t pid2, int type,
			 unsigned long idx1, unsigned long idx2);
951
asmlinkage long sys_finit_module(int fd, const char __user *uargs, int flags);
952 953 954 955 956 957 958 959 960 961
asmlinkage long sys_sched_setattr(pid_t pid,
					struct sched_attr __user *attr,
					unsigned int flags);
asmlinkage long sys_sched_getattr(pid_t pid,
					struct sched_attr __user *attr,
					unsigned int size,
					unsigned int flags);
asmlinkage long sys_renameat2(int olddfd, const char __user *oldname,
			      int newdfd, const char __user *newname,
			      unsigned int flags);
K
Kees Cook 已提交
962
asmlinkage long sys_seccomp(unsigned int op, unsigned int flags,
963
			    void __user *uargs);
964 965
asmlinkage long sys_getrandom(char __user *buf, size_t count,
			      unsigned int flags);
966
asmlinkage long sys_memfd_create(const char __user *uname_ptr, unsigned int flags);
967
asmlinkage long sys_bpf(int cmd, union bpf_attr *attr, unsigned int size);
968 969 970
asmlinkage long sys_execveat(int dfd, const char __user *filename,
			const char __user *const __user *argv,
			const char __user *const __user *envp, int flags);
971
asmlinkage long sys_userfaultfd(int flags);
972
asmlinkage long sys_membarrier(int cmd, int flags);
973
asmlinkage long sys_mlock2(unsigned long start, size_t len, int flags);
974 975 976
asmlinkage long sys_copy_file_range(int fd_in, loff_t __user *off_in,
				    int fd_out, loff_t __user *off_out,
				    size_t len, unsigned int flags);
977 978 979 980 981 982
asmlinkage long sys_preadv2(unsigned long fd, const struct iovec __user *vec,
			    unsigned long vlen, unsigned long pos_l, unsigned long pos_h,
			    rwf_t flags);
asmlinkage long sys_pwritev2(unsigned long fd, const struct iovec __user *vec,
			    unsigned long vlen, unsigned long pos_l, unsigned long pos_h,
			    rwf_t flags);
983 984 985 986
asmlinkage long sys_pkey_mprotect(unsigned long start, size_t len,
				  unsigned long prot, int pkey);
asmlinkage long sys_pkey_alloc(unsigned long flags, unsigned long init_val);
asmlinkage long sys_pkey_free(int pkey);
987 988
asmlinkage long sys_statx(int dfd, const char __user *path, unsigned flags,
			  unsigned mask, struct statx __user *buffer);
989 990
asmlinkage long sys_rseq(struct rseq __user *rseq, uint32_t rseq_len,
			 int flags, uint32_t sig);
991
asmlinkage long sys_open_tree(int dfd, const char __user *path, unsigned flags);
992 993 994
asmlinkage long sys_move_mount(int from_dfd, const char __user *from_path,
			       int to_dfd, const char __user *to_path,
			       unsigned int ms_flags);
995
asmlinkage long sys_fsopen(const char __user *fs_name, unsigned int flags);
996 997
asmlinkage long sys_fsconfig(int fs_fd, unsigned int cmd, const char __user *key,
			     const void __user *value, int aux);
998
asmlinkage long sys_fsmount(int fs_fd, unsigned int flags, unsigned int ms_flags);
999
asmlinkage long sys_fspick(int dfd, const char __user *path, unsigned int flags);
1000 1001 1002
asmlinkage long sys_pidfd_send_signal(int pidfd, int sig,
				       siginfo_t __user *info,
				       unsigned int flags);
1003

1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079
/*
 * Architecture-specific system calls
 */

/* arch/x86/kernel/ioport.c */
asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int on);

/* pciconfig: alpha, arm, arm64, ia64, sparc */
asmlinkage long sys_pciconfig_read(unsigned long bus, unsigned long dfn,
				unsigned long off, unsigned long len,
				void __user *buf);
asmlinkage long sys_pciconfig_write(unsigned long bus, unsigned long dfn,
				unsigned long off, unsigned long len,
				void __user *buf);
asmlinkage long sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn);

/* powerpc */
asmlinkage long sys_spu_run(int fd, __u32 __user *unpc,
				 __u32 __user *ustatus);
asmlinkage long sys_spu_create(const char __user *name,
		unsigned int flags, umode_t mode, int fd);


/*
 * Deprecated system calls which are still defined in
 * include/uapi/asm-generic/unistd.h and wanted by >= 1 arch
 */

/* __ARCH_WANT_SYSCALL_NO_AT */
asmlinkage long sys_open(const char __user *filename,
				int flags, umode_t mode);
asmlinkage long sys_link(const char __user *oldname,
				const char __user *newname);
asmlinkage long sys_unlink(const char __user *pathname);
asmlinkage long sys_mknod(const char __user *filename, umode_t mode,
				unsigned dev);
asmlinkage long sys_chmod(const char __user *filename, umode_t mode);
asmlinkage long sys_chown(const char __user *filename,
				uid_t user, gid_t group);
asmlinkage long sys_mkdir(const char __user *pathname, umode_t mode);
asmlinkage long sys_rmdir(const char __user *pathname);
asmlinkage long sys_lchown(const char __user *filename,
				uid_t user, gid_t group);
asmlinkage long sys_access(const char __user *filename, int mode);
asmlinkage long sys_rename(const char __user *oldname,
				const char __user *newname);
asmlinkage long sys_symlink(const char __user *old, const char __user *new);
#if defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_COMPAT_STAT64)
asmlinkage long sys_stat64(const char __user *filename,
				struct stat64 __user *statbuf);
asmlinkage long sys_lstat64(const char __user *filename,
				struct stat64 __user *statbuf);
#endif

/* __ARCH_WANT_SYSCALL_NO_FLAGS */
asmlinkage long sys_pipe(int __user *fildes);
asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd);
asmlinkage long sys_epoll_create(int size);
asmlinkage long sys_inotify_init(void);
asmlinkage long sys_eventfd(unsigned int count);
asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemask);

/* __ARCH_WANT_SYSCALL_OFF_T */
asmlinkage long sys_sendfile(int out_fd, int in_fd,
			     off_t __user *offset, size_t count);
asmlinkage long sys_newstat(const char __user *filename,
				struct stat __user *statbuf);
asmlinkage long sys_newlstat(const char __user *filename,
				struct stat __user *statbuf);
asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice);

/* __ARCH_WANT_SYSCALL_DEPRECATED */
asmlinkage long sys_alarm(unsigned int seconds);
asmlinkage long sys_getpgrp(void);
asmlinkage long sys_pause(void);
asmlinkage long sys_time(time_t __user *tloc);
1080
asmlinkage long sys_time32(old_time32_t __user *tloc);
1081
#ifdef __ARCH_WANT_SYS_UTIME
1082 1083
asmlinkage long sys_utime(char __user *filename,
				struct utimbuf __user *times);
1084 1085 1086 1087 1088
asmlinkage long sys_utimes(char __user *filename,
				struct timeval __user *utimes);
asmlinkage long sys_futimesat(int dfd, const char __user *filename,
			      struct timeval __user *utimes);
#endif
1089 1090 1091 1092 1093 1094 1095
asmlinkage long sys_futimesat_time32(unsigned int dfd,
				     const char __user *filename,
				     struct old_timeval32 __user *t);
asmlinkage long sys_utime32(const char __user *filename,
				 struct old_utimbuf32 __user *t);
asmlinkage long sys_utimes_time32(const char __user *filename,
				  struct old_timeval32 __user *t);
1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119
asmlinkage long sys_creat(const char __user *pathname, umode_t mode);
asmlinkage long sys_getdents(unsigned int fd,
				struct linux_dirent __user *dirent,
				unsigned int count);
asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
			fd_set __user *exp, struct timeval __user *tvp);
asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
				int timeout);
asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events,
				int maxevents, int timeout);
asmlinkage long sys_ustat(unsigned dev, struct ustat __user *ubuf);
asmlinkage long sys_vfork(void);
asmlinkage long sys_recv(int, void __user *, size_t, unsigned);
asmlinkage long sys_send(int, void __user *, size_t, unsigned);
asmlinkage long sys_bdflush(int func, long data);
asmlinkage long sys_oldumount(char __user *name);
asmlinkage long sys_uselib(const char __user *library);
asmlinkage long sys_sysctl(struct __sysctl_args __user *args);
asmlinkage long sys_sysfs(int option,
				unsigned long arg1, unsigned long arg2);
asmlinkage long sys_fork(void);

/* obsolete: kernel/time/time.c */
asmlinkage long sys_stime(time_t __user *tptr);
1120
asmlinkage long sys_stime32(old_time32_t __user *tptr);
1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224

/* obsolete: kernel/signal.c */
asmlinkage long sys_sigpending(old_sigset_t __user *uset);
asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set,
				old_sigset_t __user *oset);
#ifdef CONFIG_OLD_SIGSUSPEND
asmlinkage long sys_sigsuspend(old_sigset_t mask);
#endif

#ifdef CONFIG_OLD_SIGSUSPEND3
asmlinkage long sys_sigsuspend(int unused1, int unused2, old_sigset_t mask);
#endif

#ifdef CONFIG_OLD_SIGACTION
asmlinkage long sys_sigaction(int, const struct old_sigaction __user *,
				struct old_sigaction __user *);
#endif
asmlinkage long sys_sgetmask(void);
asmlinkage long sys_ssetmask(int newmask);
asmlinkage long sys_signal(int sig, __sighandler_t handler);

/* obsolete: kernel/sched/core.c */
asmlinkage long sys_nice(int increment);

/* obsolete: kernel/kexec_file.c */
asmlinkage long sys_kexec_file_load(int kernel_fd, int initrd_fd,
				    unsigned long cmdline_len,
				    const char __user *cmdline_ptr,
				    unsigned long flags);

/* obsolete: kernel/exit.c */
asmlinkage long sys_waitpid(pid_t pid, int __user *stat_addr, int options);

/* obsolete: kernel/uid16.c */
#ifdef CONFIG_HAVE_UID16
asmlinkage long sys_chown16(const char __user *filename,
				old_uid_t user, old_gid_t group);
asmlinkage long sys_lchown16(const char __user *filename,
				old_uid_t user, old_gid_t group);
asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group);
asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid);
asmlinkage long sys_setgid16(old_gid_t gid);
asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid);
asmlinkage long sys_setuid16(old_uid_t uid);
asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid);
asmlinkage long sys_getresuid16(old_uid_t __user *ruid,
				old_uid_t __user *euid, old_uid_t __user *suid);
asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid);
asmlinkage long sys_getresgid16(old_gid_t __user *rgid,
				old_gid_t __user *egid, old_gid_t __user *sgid);
asmlinkage long sys_setfsuid16(old_uid_t uid);
asmlinkage long sys_setfsgid16(old_gid_t gid);
asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist);
asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist);
asmlinkage long sys_getuid16(void);
asmlinkage long sys_geteuid16(void);
asmlinkage long sys_getgid16(void);
asmlinkage long sys_getegid16(void);
#endif

/* obsolete: net/socket.c */
asmlinkage long sys_socketcall(int call, unsigned long __user *args);

/* obsolete: fs/stat.c */
asmlinkage long sys_stat(const char __user *filename,
			struct __old_kernel_stat __user *statbuf);
asmlinkage long sys_lstat(const char __user *filename,
			struct __old_kernel_stat __user *statbuf);
asmlinkage long sys_fstat(unsigned int fd,
			struct __old_kernel_stat __user *statbuf);
asmlinkage long sys_readlink(const char __user *path,
				char __user *buf, int bufsiz);

/* obsolete: fs/select.c */
asmlinkage long sys_old_select(struct sel_arg_struct __user *arg);

/* obsolete: fs/readdir.c */
asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int);

/* obsolete: kernel/sys.c */
asmlinkage long sys_gethostname(char __user *name, int len);
asmlinkage long sys_uname(struct old_utsname __user *);
asmlinkage long sys_olduname(struct oldold_utsname __user *);
#ifdef __ARCH_WANT_SYS_OLD_GETRLIMIT
asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim);
#endif

/* obsolete: ipc */
asmlinkage long sys_ipc(unsigned int call, int first, unsigned long second,
		unsigned long third, void __user *ptr, long fifth);

/* obsolete: mm/ */
asmlinkage long sys_mmap_pgoff(unsigned long addr, unsigned long len,
			unsigned long prot, unsigned long flags,
			unsigned long fd, unsigned long pgoff);
asmlinkage long sys_old_mmap(struct mmap_arg_struct __user *arg);


/*
 * Not a real system call, but a placeholder for syscalls which are
 * not implemented -- see kernel/sys_ni.c
 */
asmlinkage long sys_ni_syscall(void);

1225 1226
#endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */

1227

1228 1229 1230 1231 1232 1233
/*
 * Kernel code should not call syscalls (i.e., sys_xyzyyz()) directly.
 * Instead, use one of the functions which work equivalently, such as
 * the ksys_xyzyyz() functions prototyped below.
 */

A
Al Viro 已提交
1234 1235
int ksys_mount(const char __user *dev_name, const char __user *dir_name,
	       const char __user *type, unsigned long flags, void __user *data);
1236
int ksys_umount(char __user *name, int flags);
1237
int ksys_dup(unsigned int fildes);
1238
int ksys_chroot(const char __user *filename);
1239
ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count);
1240
int ksys_chdir(const char __user *filename);
1241
int ksys_fchmod(unsigned int fd, umode_t mode);
1242
int ksys_fchown(unsigned int fd, uid_t user, gid_t group);
1243 1244
int ksys_getdents64(unsigned int fd, struct linux_dirent64 __user *dirent,
		    unsigned int count);
1245
int ksys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
1246
off_t ksys_lseek(unsigned int fd, off_t offset, unsigned int whence);
1247
ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count);
1248
void ksys_sync(void);
1249
int ksys_unshare(unsigned long unshare_flags);
1250
int ksys_setsid(void);
1251 1252
int ksys_sync_file_range(int fd, loff_t offset, loff_t nbytes,
			 unsigned int flags);
1253 1254 1255 1256
ssize_t ksys_pread64(unsigned int fd, char __user *buf, size_t count,
		     loff_t pos);
ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
		      size_t count, loff_t pos);
1257
int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len);
1258 1259 1260 1261 1262 1263 1264 1265 1266
#ifdef CONFIG_ADVISE_SYSCALLS
int ksys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice);
#else
static inline int ksys_fadvise64_64(int fd, loff_t offset, loff_t len,
				    int advice)
{
	return -EINVAL;
}
#endif
1267 1268 1269
unsigned long ksys_mmap_pgoff(unsigned long addr, unsigned long len,
			      unsigned long prot, unsigned long flags,
			      unsigned long fd, unsigned long pgoff);
1270
ssize_t ksys_readahead(int fd, loff_t offset, size_t count);
1271 1272 1273 1274
int ksys_ipc(unsigned int call, int first, unsigned long second,
	unsigned long third, void __user * ptr, long fifth);
int compat_ksys_ipc(u32 call, int first, int second,
	u32 third, u32 ptr, u32 fifth);
1275

1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286
/*
 * The following kernel syscall equivalents are just wrappers to fs-internal
 * functions. Therefore, provide stubs to be inlined at the callsites.
 */
extern long do_unlinkat(int dfd, struct filename *name);

static inline long ksys_unlink(const char __user *pathname)
{
	return do_unlinkat(AT_FDCWD, getname(pathname));
}

1287 1288 1289 1290 1291 1292 1293
extern long do_rmdir(int dfd, const char __user *pathname);

static inline long ksys_rmdir(const char __user *pathname)
{
	return do_rmdir(AT_FDCWD, pathname);
}

1294 1295 1296 1297 1298 1299 1300
extern long do_mkdirat(int dfd, const char __user *pathname, umode_t mode);

static inline long ksys_mkdir(const char __user *pathname, umode_t mode)
{
	return do_mkdirat(AT_FDCWD, pathname, mode);
}

1301 1302 1303 1304 1305 1306 1307 1308 1309
extern long do_symlinkat(const char __user *oldname, int newdfd,
			 const char __user *newname);

static inline long ksys_symlink(const char __user *oldname,
				const char __user *newname)
{
	return do_symlinkat(oldname, AT_FDCWD, newname);
}

1310 1311 1312 1313 1314 1315 1316 1317 1318
extern long do_mknodat(int dfd, const char __user *filename, umode_t mode,
		       unsigned int dev);

static inline long ksys_mknod(const char __user *filename, umode_t mode,
			      unsigned int dev)
{
	return do_mknodat(AT_FDCWD, filename, mode, dev);
}

1319 1320 1321 1322 1323 1324 1325 1326 1327
extern int do_linkat(int olddfd, const char __user *oldname, int newdfd,
		     const char __user *newname, int flags);

static inline long ksys_link(const char __user *oldname,
			     const char __user *newname)
{
	return do_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0);
}

1328 1329 1330 1331 1332 1333 1334
extern int do_fchmodat(int dfd, const char __user *filename, umode_t mode);

static inline int ksys_chmod(const char __user *filename, umode_t mode)
{
	return do_fchmodat(AT_FDCWD, filename, mode);
}

1335 1336 1337 1338 1339 1340 1341
extern long do_faccessat(int dfd, const char __user *filename, int mode);

static inline long ksys_access(const char __user *filename, int mode)
{
	return do_faccessat(AT_FDCWD, filename, mode);
}

1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357
extern int do_fchownat(int dfd, const char __user *filename, uid_t user,
		       gid_t group, int flag);

static inline long ksys_chown(const char __user *filename, uid_t user,
			      gid_t group)
{
	return do_fchownat(AT_FDCWD, filename, user, group, 0);
}

static inline long ksys_lchown(const char __user *filename, uid_t user,
			       gid_t group)
{
	return do_fchownat(AT_FDCWD, filename, user, group,
			     AT_SYMLINK_NOFOLLOW);
}

1358 1359 1360 1361 1362 1363 1364
extern long do_sys_ftruncate(unsigned int fd, loff_t length, int small);

static inline long ksys_ftruncate(unsigned int fd, unsigned long length)
{
	return do_sys_ftruncate(fd, length, 1);
}

1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376
extern int __close_fd(struct files_struct *files, unsigned int fd);

/*
 * In contrast to sys_close(), this stub does not check whether the syscall
 * should or should not be restarted, but returns the raw error codes from
 * __close_fd().
 */
static inline int ksys_close(unsigned int fd)
{
	return __close_fd(current->files, fd);
}

1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387
extern long do_sys_open(int dfd, const char __user *filename, int flags,
			umode_t mode);

static inline long ksys_open(const char __user *filename, int flags,
			     umode_t mode)
{
	if (force_o_largefile())
		flags |= O_LARGEFILE;
	return do_sys_open(AT_FDCWD, filename, flags, mode);
}

1388 1389 1390 1391 1392 1393 1394
extern long do_sys_truncate(const char __user *pathname, loff_t length);

static inline long ksys_truncate(const char __user *pathname, loff_t length)
{
	return do_sys_truncate(pathname, length);
}

M
Mark Rutland 已提交
1395 1396 1397 1398 1399 1400 1401 1402 1403 1404
static inline unsigned int ksys_personality(unsigned int personality)
{
	unsigned int old = current->personality;

	if (personality != 0xffffffff)
		set_personality(personality);

	return old;
}

A
Arnd Bergmann 已提交
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423
/* for __ARCH_WANT_SYS_IPC */
long ksys_semtimedop(int semid, struct sembuf __user *tsops,
		     unsigned int nsops,
		     const struct __kernel_timespec __user *timeout);
long ksys_semget(key_t key, int nsems, int semflg);
long ksys_old_semctl(int semid, int semnum, int cmd, unsigned long arg);
long ksys_msgget(key_t key, int msgflg);
long ksys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
long ksys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz,
		 long msgtyp, int msgflg);
long ksys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz,
		 int msgflg);
long ksys_shmget(key_t key, size_t size, int shmflg);
long ksys_shmdt(char __user *shmaddr);
long ksys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems,
			    unsigned int nsops,
			    const struct old_timespec32 __user *timeout);

L
Linus Torvalds 已提交
1424
#endif