1999-08-28 01:08:13 +00:00
|
|
|
$FreeBSD$
|
1994-08-02 07:55:43 +00:00
|
|
|
; from: @(#)syscalls.master 8.2 (Berkeley) 1/13/94
|
|
|
|
;
|
1994-05-24 10:09:53 +00:00
|
|
|
; System call name/number master file.
|
|
|
|
; Processed to created init_sysent.c, syscalls.c and syscall.h.
|
|
|
|
|
2006-07-28 19:05:28 +00:00
|
|
|
; Columns: number audit type name alt{name,tag,rtyp}/comments
|
1994-05-24 10:09:53 +00:00
|
|
|
; number system call number, must be in order
|
2005-05-30 15:09:18 +00:00
|
|
|
; audit the audit event associated with the system call
|
|
|
|
; A value of AUE_NULL means no auditing, but it also means that
|
|
|
|
; there is no audit event for the call at this time. For the
|
|
|
|
; case where the event exists, but we don't want auditing, the
|
|
|
|
; event should be #defined to AUE_NULL in audit_kevents.h.
|
2009-06-17 19:50:38 +00:00
|
|
|
; type one of STD, OBSOL, UNIMPL, COMPAT, COMPAT4, COMPAT6,
|
Commit the 64-bit inode project.
Extend the ino_t, dev_t, nlink_t types to 64-bit ints. Modify
struct dirent layout to add d_off, increase the size of d_fileno
to 64-bits, increase the size of d_namlen to 16-bits, and change
the required alignment. Increase struct statfs f_mntfromname[] and
f_mntonname[] array length MNAMELEN to 1024.
ABI breakage is mitigated by providing compatibility using versioned
symbols, ingenious use of the existing padding in structures, and
by employing other tricks. Unfortunately, not everything can be
fixed, especially outside the base system. For instance, third-party
APIs which pass struct stat around are broken in backward and
forward incompatible ways.
Kinfo sysctl MIBs ABI is changed in backward-compatible way, but
there is no general mechanism to handle other sysctl MIBS which
return structures where the layout has changed. It was considered
that the breakage is either in the management interfaces, where we
usually allow ABI slip, or is not important.
Struct xvnode changed layout, no compat shims are provided.
For struct xtty, dev_t tty device member was reduced to uint32_t.
It was decided that keeping ABI compat in this case is more useful
than reporting 64-bit dev_t, for the sake of pstat.
Update note: strictly follow the instructions in UPDATING. Build
and install the new kernel with COMPAT_FREEBSD11 option enabled,
then reboot, and only then install new world.
Credits: The 64-bit inode project, also known as ino64, started life
many years ago as a project by Gleb Kurtsou (gleb). Kirk McKusick
(mckusick) then picked up and updated the patch, and acted as a
flag-waver. Feedback, suggestions, and discussions were carried
by Ed Maste (emaste), John Baldwin (jhb), Jilles Tjoelker (jilles),
and Rick Macklem (rmacklem). Kris Moore (kris) performed an initial
ports investigation followed by an exp-run by Antoine Brodin (antoine).
Essential and all-embracing testing was done by Peter Holm (pho).
The heavy lifting of coordinating all these efforts and bringing the
project to completion were done by Konstantin Belousov (kib).
Sponsored by: The FreeBSD Foundation (emaste, kib)
Differential revision: https://reviews.freebsd.org/D10439
2017-05-23 09:29:05 +00:00
|
|
|
; COMPAT7, COMPAT11, NODEF, NOARGS, NOPROTO, NOSTD
|
2009-06-17 19:50:38 +00:00
|
|
|
; The COMPAT* options may be combined with one or more NO*
|
|
|
|
; options separated by '|' with no spaces (e.g. COMPAT|NOARGS)
|
2018-02-23 18:15:50 +00:00
|
|
|
; name pseudo-prototype of syscall routine
|
1995-09-19 13:31:04 +00:00
|
|
|
; If one of the following alts is different, then all appear:
|
1994-05-24 10:09:53 +00:00
|
|
|
; altname name of system call if different
|
1995-09-19 13:31:04 +00:00
|
|
|
; alttag name of args struct tag if different from [o]`name'"_args"
|
|
|
|
; altrtyp return type if not int (bogus - syscalls always return int)
|
1994-05-24 10:09:53 +00:00
|
|
|
; for UNIMPL/OBSOL, name continues with comments
|
|
|
|
|
|
|
|
; types:
|
|
|
|
; STD always included
|
|
|
|
; COMPAT included on COMPAT #ifdef
|
2016-08-03 18:48:56 +00:00
|
|
|
; COMPAT4 included on COMPAT_FREEBSD4 #ifdef (FreeBSD 4 compat)
|
|
|
|
; COMPAT6 included on COMPAT_FREEBSD6 #ifdef (FreeBSD 6 compat)
|
|
|
|
; COMPAT7 included on COMPAT_FREEBSD7 #ifdef (FreeBSD 7 compat)
|
|
|
|
; COMPAT10 included on COMPAT_FREEBSD10 #ifdef (FreeBSD 10 compat)
|
2018-10-15 21:35:57 +00:00
|
|
|
; COMPAT11 included on COMPAT_FREEBSD11 #ifdef (FreeBSD 11 compat)
|
1994-05-24 10:09:53 +00:00
|
|
|
; OBSOL obsolete, not included in system, only specifies name
|
|
|
|
; UNIMPL not implemented, placeholder only
|
2000-12-01 08:57:47 +00:00
|
|
|
; NOSTD implemented but as a lkm that can be statically
|
2009-06-17 18:44:15 +00:00
|
|
|
; compiled in; sysent entry will be filled with lkmressys
|
2006-07-28 18:55:18 +00:00
|
|
|
; so the SYSCALL_MODULE macro works
|
2008-08-21 22:57:31 +00:00
|
|
|
; NOARGS same as STD except do not create structure in sys/sysproto.h
|
|
|
|
; NODEF same as STD except only have the entry in the syscall table
|
2008-09-25 20:07:42 +00:00
|
|
|
; added. Meaning - do not create structure or function
|
2008-08-21 22:57:31 +00:00
|
|
|
; prototype in sys/sysproto.h
|
|
|
|
; NOPROTO same as STD except do not create structure or
|
|
|
|
; function prototype in sys/sysproto.h. Does add a
|
|
|
|
; definition to syscall.h besides adding a sysent.
|
2010-08-26 11:20:57 +00:00
|
|
|
; NOTSTATIC syscall is loadable
|
2018-04-05 20:31:45 +00:00
|
|
|
|
|
|
|
; annotations:
|
|
|
|
; SAL 2.0 annotations are used to specify how system calls treat
|
|
|
|
; arguments that are passed using pointers. There are three basic
|
|
|
|
; annotations.
|
|
|
|
;
|
|
|
|
; _In_ Object pointed to will be read and not modified.
|
|
|
|
; _Out_ Object pointed to will be written and not read.
|
|
|
|
; _Inout_ Object pointed to will be written and read.
|
|
|
|
;
|
|
|
|
; These annotations are used alone when the pointer refers to a single
|
|
|
|
; object i.e. scalar types, structs, and pointers, and not NULL. Adding
|
|
|
|
; the _opt_ suffix, e.g. _In_opt_, implies that the pointer may also
|
|
|
|
; refer to NULL.
|
|
|
|
;
|
|
|
|
; For pointers to arrays, additional suffixes are added:
|
2002-10-10 04:02:49 +00:00
|
|
|
;
|
2018-04-05 20:31:45 +00:00
|
|
|
; _In_z_, _Out_z_, _Inout_z_:
|
|
|
|
; for a NUL terminated array e.g. a string.
|
|
|
|
; _In_reads_z_(n),_Out_writes_z_(n), _Inout_updates_z_(n):
|
|
|
|
; for a NUL terminated array e.g. a string, of known length n bytes.
|
|
|
|
; _In_reads_(n),_Out_writes_(n),_Inout_updates_(n):
|
|
|
|
; for an array of n elements.
|
|
|
|
; _In_reads_bytes_(n), _Out_writes_bytes_(n), _Inout_updates_bytes(n):
|
|
|
|
; for a buffer of n-bytes.
|
|
|
|
|
2002-10-10 04:02:49 +00:00
|
|
|
; Please copy any additions and changes to the following compatability tables:
|
2003-12-10 22:08:37 +00:00
|
|
|
; sys/compat/freebsd32/syscalls.master
|
|
|
|
|
1994-05-24 10:09:53 +00:00
|
|
|
; #ifdef's, etc. may be included, and are copied to the output files.
|
|
|
|
|
Add new functionality to makesyscalls.sh:
o optional config-file to set vars: sysnames, sysproto, sysproto_h,
syshdr, syssw, syshide, syscallprefix, switchname, namesname, sysvec.
o change syntax of syscalls.master entry:
remove argument count.
add pseudo-prototype field defining function name and arguments.
o generates correct structure definitions for all system calls
in sys/sysproto.h
o add type NOARGS: same as STD except do not create structure in
sys/sysproto.h
o add type NOPROTO: same as STD except do not create structure or function
prototype in sys/sysproto.h
New functionality provides complete prototype definitions.
Usefull for generating files for emulated systems like my new ibcs2 code.
Update syscalls.master to reflect new changes. For example, read()
entry now looks like:
3 STD POSIX { int ibcs2_read(int fd, char *buf, u_int nbytes); }
This is similar to how NetBSD generates these files.
1995-10-07 06:24:08 +00:00
|
|
|
#include <sys/param.h>
|
|
|
|
#include <sys/sysent.h>
|
|
|
|
#include <sys/sysproto.h>
|
|
|
|
|
1994-05-24 10:09:53 +00:00
|
|
|
; Reserved/unimplemented system calls in the range 0-150 inclusive
|
|
|
|
; are reserved for use in future Berkeley releases.
|
|
|
|
; Additional system calls implemented in vendor and other
|
|
|
|
; redistributions should be placed in the reserved range at the end
|
|
|
|
; of the current calls.
|
|
|
|
|
2006-07-28 19:05:28 +00:00
|
|
|
0 AUE_NULL STD { int nosys(void); } syscall nosys_args int
|
|
|
|
1 AUE_EXIT STD { void sys_exit(int rval); } exit \
|
2005-05-30 15:09:18 +00:00
|
|
|
sys_exit_args void
|
2006-07-28 19:05:28 +00:00
|
|
|
2 AUE_FORK STD { int fork(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
3 AUE_READ STD { ssize_t read(int fd, \
|
|
|
|
_Out_writes_bytes_(nbyte) void *buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nbyte); }
|
2018-04-05 20:31:45 +00:00
|
|
|
4 AUE_WRITE STD { ssize_t write(int fd, \
|
|
|
|
_In_reads_bytes_(nbyte) const void *buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nbyte); }
|
2018-04-05 20:31:45 +00:00
|
|
|
5 AUE_OPEN_RWTC STD { int open( \
|
|
|
|
_In_z_ char *path, \
|
|
|
|
int flags, \
|
|
|
|
int mode); }
|
Fixed the args list for mount(). We're not ready for the BSD4.4lite2/
NetBSD interface.
Increased the bogusness of the args list for mmap(). The args lists for
most of the memory mapping functions are bogus. The args lists in
syscalls.master are a little better than the ones in the args structs
currently being used, but the improvement for mmap() changed the object
code and I don't want to worry about that now.
Increased the bogusness of the args list for fcntl. BSD4.4lite2/NetBSD
uses `void *' instead of int for the third arg. This has the advantage
of working when `void *'s are longer than ints, but requires extra bogus
casts that I hope to avoid.
Fixed the args list for uname. `struct outsname' seems to be a typo,
not an old interface.
Added comments about bogus args lists for open, mount, msync, munmap,
mprotect, madvise, mincore, fcntl, semsys, msgsys and shmsys.
1995-11-12 04:24:53 +00:00
|
|
|
; XXX should be { int open(const char *path, int flags, ...); }
|
|
|
|
; but we're not ready for `const' or varargs.
|
|
|
|
; XXX man page says `mode_t mode'.
|
2006-07-28 19:05:28 +00:00
|
|
|
6 AUE_CLOSE STD { int close(int fd); }
|
2018-04-05 20:31:45 +00:00
|
|
|
7 AUE_WAIT4 STD { int wait4(int pid, \
|
|
|
|
_Out_opt_ int *status, \
|
|
|
|
int options, \
|
|
|
|
_Out_opt_ struct rusage *rusage); }
|
|
|
|
8 AUE_CREAT COMPAT { int creat(_In_z_ char *path, int mode); }
|
|
|
|
9 AUE_LINK STD { int link(_In_z_ char *path, \
|
|
|
|
_In_z_ char *link); }
|
|
|
|
10 AUE_UNLINK STD { int unlink(_In_z_ char *path); }
|
2005-05-30 15:09:18 +00:00
|
|
|
11 AUE_NULL OBSOL execv
|
2018-04-05 20:31:45 +00:00
|
|
|
12 AUE_CHDIR STD { int chdir(_In_z_ char *path); }
|
2006-07-28 19:05:28 +00:00
|
|
|
13 AUE_FCHDIR STD { int fchdir(int fd); }
|
2018-04-05 20:31:45 +00:00
|
|
|
14 AUE_MKNOD COMPAT11 { int mknod(_In_z_ char *path, int mode, \
|
|
|
|
int dev); }
|
|
|
|
15 AUE_CHMOD STD { int chmod(_In_z_ char *path, int mode); }
|
|
|
|
16 AUE_CHOWN STD { int chown(_In_z_ char *path, \
|
|
|
|
int uid, int gid); }
|
2018-06-14 21:27:25 +00:00
|
|
|
17 AUE_NULL STD { caddr_t break(_In_ char *nsize); }
|
2018-04-05 20:31:45 +00:00
|
|
|
18 AUE_GETFSSTAT COMPAT4 { int getfsstat( \
|
|
|
|
_Out_writes_bytes_opt_(bufsize) \
|
|
|
|
struct ostatfs *buf, \
|
2016-12-27 20:21:11 +00:00
|
|
|
long bufsize, int mode); }
|
2006-07-28 19:05:28 +00:00
|
|
|
19 AUE_LSEEK COMPAT { long lseek(int fd, long offset, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int whence); }
|
2006-07-28 19:05:28 +00:00
|
|
|
20 AUE_GETPID STD { pid_t getpid(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
21 AUE_MOUNT STD { int mount(_In_z_ char *type, \
|
|
|
|
_In_z_ char *path, int flags, \
|
|
|
|
_In_opt_ caddr_t data); }
|
Fixed the args list for mount(). We're not ready for the BSD4.4lite2/
NetBSD interface.
Increased the bogusness of the args list for mmap(). The args lists for
most of the memory mapping functions are bogus. The args lists in
syscalls.master are a little better than the ones in the args structs
currently being used, but the improvement for mmap() changed the object
code and I don't want to worry about that now.
Increased the bogusness of the args list for fcntl. BSD4.4lite2/NetBSD
uses `void *' instead of int for the third arg. This has the advantage
of working when `void *'s are longer than ints, but requires extra bogus
casts that I hope to avoid.
Fixed the args list for uname. `struct outsname' seems to be a typo,
not an old interface.
Added comments about bogus args lists for open, mount, msync, munmap,
mprotect, madvise, mincore, fcntl, semsys, msgsys and shmsys.
1995-11-12 04:24:53 +00:00
|
|
|
; XXX `path' should have type `const char *' but we're not ready for that.
|
2018-04-05 20:31:45 +00:00
|
|
|
22 AUE_UMOUNT STD { int unmount(_In_z_ char *path, int flags); }
|
2006-07-28 19:05:28 +00:00
|
|
|
23 AUE_SETUID STD { int setuid(uid_t uid); }
|
|
|
|
24 AUE_GETUID STD { uid_t getuid(void); }
|
|
|
|
25 AUE_GETEUID STD { uid_t geteuid(void); }
|
|
|
|
26 AUE_PTRACE STD { int ptrace(int req, pid_t pid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ caddr_t addr, int data); }
|
|
|
|
27 AUE_RECVMSG STD { int recvmsg(int s, \
|
|
|
|
_Inout_ struct msghdr *msg, int flags); }
|
|
|
|
28 AUE_SENDMSG STD { int sendmsg(int s, _In_ struct msghdr *msg, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
29 AUE_RECVFROM STD { int recvfrom(int s, \
|
|
|
|
_Out_writes_bytes_(len) caddr_t buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t len, int flags, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_opt_(*fromlenaddr) \
|
2018-10-22 21:50:43 +00:00
|
|
|
struct sockaddr *from, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ \
|
2018-10-22 21:50:43 +00:00
|
|
|
__socklen_t *fromlenaddr); }
|
2006-07-28 19:05:28 +00:00
|
|
|
30 AUE_ACCEPT STD { int accept(int s, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_opt_(*anamelen) \
|
2018-10-22 21:50:43 +00:00
|
|
|
struct sockaddr *name, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ \
|
2018-10-22 21:50:43 +00:00
|
|
|
__socklen_t *anamelen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
31 AUE_GETPEERNAME STD { int getpeername(int fdes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_(*alen) \
|
2018-10-22 21:50:43 +00:00
|
|
|
struct sockaddr *asa, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ \
|
2018-10-22 21:50:43 +00:00
|
|
|
__socklen_t *alen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
32 AUE_GETSOCKNAME STD { int getsockname(int fdes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_(*alen) \
|
2018-10-22 21:50:43 +00:00
|
|
|
struct sockaddr *asa, \
|
|
|
|
_Inout_ __socklen_t *alen); }
|
2018-04-05 20:31:45 +00:00
|
|
|
33 AUE_ACCESS STD { int access(_In_z_ char *path, int amode); }
|
|
|
|
34 AUE_CHFLAGS STD { int chflags(_In_z_ const char *path, \
|
|
|
|
u_long flags); }
|
2013-03-21 22:44:33 +00:00
|
|
|
35 AUE_FCHFLAGS STD { int fchflags(int fd, u_long flags); }
|
2006-07-28 19:05:28 +00:00
|
|
|
36 AUE_SYNC STD { int sync(void); }
|
|
|
|
37 AUE_KILL STD { int kill(int pid, int signum); }
|
2018-04-05 20:31:45 +00:00
|
|
|
38 AUE_STAT COMPAT { int stat(_In_z_ char *path, \
|
|
|
|
_Out_ struct ostat *ub); }
|
2006-07-28 19:05:28 +00:00
|
|
|
39 AUE_GETPPID STD { pid_t getppid(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
40 AUE_LSTAT COMPAT { int lstat(_In_z_ char *path, \
|
|
|
|
_Out_ struct ostat *ub); }
|
2006-07-28 19:05:28 +00:00
|
|
|
41 AUE_DUP STD { int dup(u_int fd); }
|
2016-06-22 21:15:59 +00:00
|
|
|
42 AUE_PIPE COMPAT10 { int pipe(void); }
|
2006-07-28 19:05:28 +00:00
|
|
|
43 AUE_GETEGID STD { gid_t getegid(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
44 AUE_PROFILE STD { int profil( \
|
|
|
|
_Out_writes_bytes_(size) caddr_t samples, \
|
|
|
|
size_t size, size_t offset, u_int scale); }
|
|
|
|
45 AUE_KTRACE STD { int ktrace(_In_z_ const char *fname, \
|
|
|
|
int ops, int facs, int pid); }
|
2006-07-28 19:05:28 +00:00
|
|
|
46 AUE_SIGACTION COMPAT { int sigaction(int signum, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ struct osigaction *nsa, \
|
|
|
|
_Out_opt_ struct osigaction *osa); }
|
2006-07-28 19:05:28 +00:00
|
|
|
47 AUE_GETGID STD { gid_t getgid(void); }
|
|
|
|
48 AUE_SIGPROCMASK COMPAT { int sigprocmask(int how, osigset_t mask); }
|
1997-01-16 15:58:32 +00:00
|
|
|
; XXX note nonstandard (bogus) calling convention - the libc stub passes
|
|
|
|
; us the mask, not a pointer to it, and we return the old mask as the
|
|
|
|
; (int) return value.
|
2018-04-05 20:31:45 +00:00
|
|
|
49 AUE_GETLOGIN STD { int getlogin( \
|
|
|
|
_Out_writes_z_(namelen) char *namebuf, \
|
|
|
|
u_int namelen); }
|
|
|
|
50 AUE_SETLOGIN STD { int setlogin(_In_z_ char *namebuf); }
|
|
|
|
51 AUE_ACCT STD { int acct(_In_z_ char *path); }
|
2006-07-28 19:05:28 +00:00
|
|
|
52 AUE_SIGPENDING COMPAT { int sigpending(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
53 AUE_SIGALTSTACK STD { int sigaltstack(_In_opt_ stack_t *ss, \
|
|
|
|
_Out_opt_ stack_t *oss); }
|
2006-07-28 19:05:28 +00:00
|
|
|
54 AUE_IOCTL STD { int ioctl(int fd, u_long com, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ caddr_t data); }
|
2006-07-28 19:05:28 +00:00
|
|
|
55 AUE_REBOOT STD { int reboot(int opt); }
|
2018-04-05 20:31:45 +00:00
|
|
|
56 AUE_REVOKE STD { int revoke(_In_z_ char *path); }
|
|
|
|
57 AUE_SYMLINK STD { int symlink(_In_z_ char *path, \
|
|
|
|
_In_z_ char *link); }
|
|
|
|
58 AUE_READLINK STD { ssize_t readlink(_In_z_ char *path, \
|
|
|
|
_Out_writes_z_(count) char *buf, \
|
2008-02-12 20:09:04 +00:00
|
|
|
size_t count); }
|
2018-04-05 20:31:45 +00:00
|
|
|
59 AUE_EXECVE STD { int execve( \
|
|
|
|
_In_z_ char *fname, \
|
|
|
|
_In_z_ char **argv, \
|
|
|
|
_In_z_ char **envv); }
|
2018-05-30 22:22:58 +00:00
|
|
|
60 AUE_UMASK STD { int umask(int newmask); }
|
2018-04-05 20:31:45 +00:00
|
|
|
61 AUE_CHROOT STD { int chroot(_In_z_ char *path); }
|
|
|
|
62 AUE_FSTAT COMPAT { int fstat(int fd, _Out_ struct ostat *sb); }
|
|
|
|
63 AUE_NULL COMPAT { int getkerninfo(int op, \
|
|
|
|
_Out_writes_bytes_opt(*size) char *where, \
|
|
|
|
_Inout_opt_ size_t *size, \
|
|
|
|
int arg); } getkerninfo getkerninfo_args int
|
2006-10-03 20:46:52 +00:00
|
|
|
64 AUE_NULL COMPAT { int getpagesize(void); } getpagesize \
|
2005-05-30 15:09:18 +00:00
|
|
|
getpagesize_args int
|
2018-04-05 20:31:45 +00:00
|
|
|
65 AUE_MSYNC STD { int msync(_In_ void *addr, size_t len, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
2006-07-28 19:05:28 +00:00
|
|
|
66 AUE_VFORK STD { int vfork(void); }
|
2005-05-30 15:09:18 +00:00
|
|
|
67 AUE_NULL OBSOL vread
|
|
|
|
68 AUE_NULL OBSOL vwrite
|
2006-07-28 19:05:28 +00:00
|
|
|
69 AUE_SBRK STD { int sbrk(int incr); }
|
|
|
|
70 AUE_SSTK STD { int sstk(int incr); }
|
2018-04-05 20:31:45 +00:00
|
|
|
71 AUE_MMAP COMPAT { int mmap(_In_ void *addr, int len, int prot, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags, int fd, long pos); }
|
2018-05-25 20:40:23 +00:00
|
|
|
72 AUE_O_VADVISE COMPAT11 { int vadvise(int anom); }
|
2018-04-05 20:31:45 +00:00
|
|
|
73 AUE_MUNMAP STD { int munmap(_In_ void *addr, size_t len); }
|
|
|
|
74 AUE_MPROTECT STD { int mprotect(_In_ void *addr, \
|
|
|
|
size_t len, int prot); }
|
|
|
|
75 AUE_MADVISE STD { int madvise(_In_ void *addr, \
|
|
|
|
size_t len, int behav); }
|
2005-05-30 15:09:18 +00:00
|
|
|
76 AUE_NULL OBSOL vhangup
|
|
|
|
77 AUE_NULL OBSOL vlimit
|
2018-04-05 20:31:45 +00:00
|
|
|
78 AUE_MINCORE STD { int mincore( \
|
|
|
|
_In_ const void *addr, \
|
|
|
|
size_t len, \
|
|
|
|
_Out_writes_bytes_(len/PAGE_SIZE) \
|
2005-05-30 15:09:18 +00:00
|
|
|
char *vec); }
|
2006-07-28 19:05:28 +00:00
|
|
|
79 AUE_GETGROUPS STD { int getgroups(u_int gidsetsize, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_opt_(gidsetsize) \
|
2005-05-30 15:09:18 +00:00
|
|
|
gid_t *gidset); }
|
2006-07-28 19:05:28 +00:00
|
|
|
80 AUE_SETGROUPS STD { int setgroups(u_int gidsetsize, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_(gidsetsize) gid_t *gidset); }
|
2006-07-28 19:05:28 +00:00
|
|
|
81 AUE_GETPGRP STD { int getpgrp(void); }
|
|
|
|
82 AUE_SETPGRP STD { int setpgid(int pid, int pgid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
83 AUE_SETITIMER STD { int setitimer(u_int which, \
|
|
|
|
_In_ struct itimerval *itv, \
|
|
|
|
_Out_opt_ struct itimerval *oitv); }
|
2006-07-28 19:05:28 +00:00
|
|
|
84 AUE_WAIT4 COMPAT { int wait(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
85 AUE_SWAPON STD { int swapon(_In_z_ char *name); }
|
2006-07-28 19:05:28 +00:00
|
|
|
86 AUE_GETITIMER STD { int getitimer(u_int which, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct itimerval *itv); }
|
|
|
|
87 AUE_SYSCTL COMPAT { int gethostname( \
|
|
|
|
_Out_writes_z_(len) char *hostname, \
|
2005-05-30 15:09:18 +00:00
|
|
|
u_int len); } gethostname \
|
|
|
|
gethostname_args int
|
2018-04-05 20:31:45 +00:00
|
|
|
88 AUE_SYSCTL COMPAT { int sethostname( \
|
|
|
|
_In_reads_z_(len) char *hostname, \
|
2005-05-30 15:09:18 +00:00
|
|
|
u_int len); } sethostname \
|
|
|
|
sethostname_args int
|
2006-07-28 19:05:28 +00:00
|
|
|
89 AUE_GETDTABLESIZE STD { int getdtablesize(void); }
|
|
|
|
90 AUE_DUP2 STD { int dup2(u_int from, u_int to); }
|
2005-05-30 15:09:18 +00:00
|
|
|
91 AUE_NULL UNIMPL getdopt
|
2006-07-28 19:05:28 +00:00
|
|
|
92 AUE_FCNTL STD { int fcntl(int fd, int cmd, long arg); }
|
2003-12-23 03:51:36 +00:00
|
|
|
; XXX should be { int fcntl(int fd, int cmd, ...); }
|
Fixed the args list for mount(). We're not ready for the BSD4.4lite2/
NetBSD interface.
Increased the bogusness of the args list for mmap(). The args lists for
most of the memory mapping functions are bogus. The args lists in
syscalls.master are a little better than the ones in the args structs
currently being used, but the improvement for mmap() changed the object
code and I don't want to worry about that now.
Increased the bogusness of the args list for fcntl. BSD4.4lite2/NetBSD
uses `void *' instead of int for the third arg. This has the advantage
of working when `void *'s are longer than ints, but requires extra bogus
casts that I hope to avoid.
Fixed the args list for uname. `struct outsname' seems to be a typo,
not an old interface.
Added comments about bogus args lists for open, mount, msync, munmap,
mprotect, madvise, mincore, fcntl, semsys, msgsys and shmsys.
1995-11-12 04:24:53 +00:00
|
|
|
; but we're not ready for varargs.
|
2018-04-05 20:31:45 +00:00
|
|
|
93 AUE_SELECT STD { int select(int nd, \
|
|
|
|
_Inout_opt_ fd_set *in, \
|
|
|
|
_Inout_opt_ fd_set *ou, \
|
|
|
|
_Inout_opt_ fd_set *ex, \
|
|
|
|
_In_opt_ struct timeval *tv); }
|
2005-05-30 15:09:18 +00:00
|
|
|
94 AUE_NULL UNIMPL setdopt
|
2006-07-28 19:05:28 +00:00
|
|
|
95 AUE_FSYNC STD { int fsync(int fd); }
|
|
|
|
96 AUE_SETPRIORITY STD { int setpriority(int which, int who, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int prio); }
|
2006-07-28 19:05:28 +00:00
|
|
|
97 AUE_SOCKET STD { int socket(int domain, int type, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int protocol); }
|
2018-04-05 20:31:45 +00:00
|
|
|
98 AUE_CONNECT STD { int connect(int s, \
|
|
|
|
_In_reads_bytes_(namelen) caddr_t name, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int namelen); }
|
2018-04-05 20:31:45 +00:00
|
|
|
99 AUE_ACCEPT COMPAT|NOARGS { int accept(int s, \
|
|
|
|
_Out_writes_bytes_opt_(*anamelen) \
|
|
|
|
caddr_t name, int *anamelen); } \
|
|
|
|
accept accept_args int
|
2006-07-28 19:05:28 +00:00
|
|
|
100 AUE_GETPRIORITY STD { int getpriority(int which, int who); }
|
2018-04-05 20:31:45 +00:00
|
|
|
101 AUE_SEND COMPAT { int send(int s, \
|
|
|
|
_In_reads_bytes_(len) caddr_t buf, \
|
|
|
|
int len, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
102 AUE_RECV COMPAT { int recv(int s, \
|
|
|
|
_Out_writes_bytes_(len) caddr_t buf, \
|
|
|
|
int len, int flags); }
|
2006-07-28 19:05:28 +00:00
|
|
|
103 AUE_SIGRETURN COMPAT { int sigreturn( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct osigcontext *sigcntxp); }
|
|
|
|
104 AUE_BIND STD { int bind(int s, \
|
|
|
|
_In_reads_bytes_(namelen) caddr_t name, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int namelen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
105 AUE_SETSOCKOPT STD { int setsockopt(int s, int level, int name, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_bytes_opt_(valsize) caddr_t val, \
|
|
|
|
int valsize); }
|
2006-07-28 19:05:28 +00:00
|
|
|
106 AUE_LISTEN STD { int listen(int s, int backlog); }
|
2005-05-30 15:09:18 +00:00
|
|
|
107 AUE_NULL OBSOL vtimes
|
2018-04-05 20:31:45 +00:00
|
|
|
108 AUE_NULL COMPAT { int sigvec(int signum, \
|
|
|
|
_In_opt_ struct sigvec *nsv, \
|
|
|
|
_Out_opt_ struct sigvec *osv); }
|
2006-07-28 19:05:28 +00:00
|
|
|
109 AUE_NULL COMPAT { int sigblock(int mask); }
|
|
|
|
110 AUE_NULL COMPAT { int sigsetmask(int mask); }
|
|
|
|
111 AUE_NULL COMPAT { int sigsuspend(osigset_t mask); }
|
1997-01-16 15:58:32 +00:00
|
|
|
; XXX note nonstandard (bogus) calling convention - the libc stub passes
|
|
|
|
; us the mask, not a pointer to it.
|
2018-04-05 20:31:45 +00:00
|
|
|
112 AUE_NULL COMPAT { int sigstack(_In_opt_ struct sigstack *nss, \
|
|
|
|
_Out_opt_ struct sigstack *oss); }
|
|
|
|
113 AUE_RECVMSG COMPAT { int recvmsg(int s, \
|
|
|
|
_Inout_ struct omsghdr *msg, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
114 AUE_SENDMSG COMPAT { int sendmsg(int s, _In_ caddr_t msg, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
|
|
|
115 AUE_NULL OBSOL vtrace
|
2018-04-05 20:31:45 +00:00
|
|
|
116 AUE_GETTIMEOFDAY STD { int gettimeofday( \
|
|
|
|
_Out_ struct timeval *tp, \
|
|
|
|
_Out_opt_ struct timezone *tzp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
117 AUE_GETRUSAGE STD { int getrusage(int who, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct rusage *rusage); }
|
2006-07-28 19:05:28 +00:00
|
|
|
118 AUE_GETSOCKOPT STD { int getsockopt(int s, int level, int name, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_opt_(*avalsize) \
|
|
|
|
caddr_t val, _Inout_ int *avalsize); }
|
2005-05-30 15:09:18 +00:00
|
|
|
119 AUE_NULL UNIMPL resuba (BSD/OS 2.x)
|
2018-04-05 20:31:45 +00:00
|
|
|
120 AUE_READV STD { int readv(int fd, \
|
|
|
|
_Inout_updates_(iovcnt) struct iovec *iovp, \
|
|
|
|
u_int iovcnt); }
|
|
|
|
121 AUE_WRITEV STD { int writev(int fd, \
|
|
|
|
_In_reads_opt_(iovcnt) struct iovec *iovp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
u_int iovcnt); }
|
2018-04-05 20:31:45 +00:00
|
|
|
122 AUE_SETTIMEOFDAY STD { int settimeofday( \
|
|
|
|
_In_ struct timeval *tv, \
|
|
|
|
_In_opt_ struct timezone *tzp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
123 AUE_FCHOWN STD { int fchown(int fd, int uid, int gid); }
|
|
|
|
124 AUE_FCHMOD STD { int fchmod(int fd, int mode); }
|
2018-04-05 20:31:45 +00:00
|
|
|
125 AUE_RECVFROM COMPAT|NOARGS { int recvfrom(int s, \
|
|
|
|
_Out_writes_(len) caddr_t buf, \
|
|
|
|
size_t len, int flags, \
|
|
|
|
_Out_writes_bytes_(*fromlenaddr) \
|
|
|
|
caddr_t from, \
|
|
|
|
_Inout_ int *fromlenaddr); } \
|
|
|
|
recvfrom recvfrom_args int
|
2006-07-28 19:05:28 +00:00
|
|
|
126 AUE_SETREUID STD { int setreuid(int ruid, int euid); }
|
|
|
|
127 AUE_SETREGID STD { int setregid(int rgid, int egid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
128 AUE_RENAME STD { int rename(_In_z_ char *from, \
|
|
|
|
_In_z_ char *to); }
|
|
|
|
129 AUE_TRUNCATE COMPAT { int truncate(_In_z_ char *path, \
|
|
|
|
long length); }
|
2006-07-28 19:05:28 +00:00
|
|
|
130 AUE_FTRUNCATE COMPAT { int ftruncate(int fd, long length); }
|
|
|
|
131 AUE_FLOCK STD { int flock(int fd, int how); }
|
2018-04-05 20:31:45 +00:00
|
|
|
132 AUE_MKFIFO STD { int mkfifo(_In_z_ char *path, int mode); }
|
|
|
|
133 AUE_SENDTO STD { int sendto(int s, \
|
|
|
|
_In_reads_bytes_(len) caddr_t buf, \
|
|
|
|
size_t len, int flags, \
|
|
|
|
_In_reads_bytes_opt_(tolen) caddr_t to, \
|
|
|
|
int tolen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
134 AUE_SHUTDOWN STD { int shutdown(int s, int how); }
|
|
|
|
135 AUE_SOCKETPAIR STD { int socketpair(int domain, int type, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int protocol, _Out_writes_(2) int *rsv); }
|
|
|
|
136 AUE_MKDIR STD { int mkdir(_In_z_ char *path, int mode); }
|
|
|
|
137 AUE_RMDIR STD { int rmdir(_In_z_ char *path); }
|
|
|
|
138 AUE_UTIMES STD { int utimes(_In_z_ char *path, \
|
|
|
|
_In_ struct timeval *tptr); }
|
2005-05-30 15:09:18 +00:00
|
|
|
139 AUE_NULL OBSOL 4.2 sigreturn
|
2018-04-05 20:31:45 +00:00
|
|
|
140 AUE_ADJTIME STD { int adjtime(_In_ struct timeval *delta, \
|
|
|
|
_Out_opt_ struct timeval *olddelta); }
|
|
|
|
141 AUE_GETPEERNAME COMPAT { int getpeername(int fdes, \
|
|
|
|
_Out_writes_bytes_(*alen) \
|
|
|
|
caddr_t asa, \
|
|
|
|
_Inout_opt_ int *alen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
142 AUE_SYSCTL COMPAT { long gethostid(void); }
|
|
|
|
143 AUE_SYSCTL COMPAT { int sethostid(long hostid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
144 AUE_GETRLIMIT COMPAT { int getrlimit(u_int which, _Out_ struct \
|
2005-05-30 15:09:18 +00:00
|
|
|
orlimit *rlp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
145 AUE_SETRLIMIT COMPAT { int setrlimit(u_int which, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct orlimit *rlp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
146 AUE_KILLPG COMPAT { int killpg(int pgid, int signum); }
|
|
|
|
147 AUE_SETSID STD { int setsid(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
148 AUE_QUOTACTL STD { int quotactl( \
|
|
|
|
_In_z_ char *path, int cmd, int uid, \
|
|
|
|
_In_ caddr_t arg); }
|
2006-07-28 19:05:28 +00:00
|
|
|
149 AUE_O_QUOTA COMPAT { int quota(void); }
|
2009-06-17 19:50:38 +00:00
|
|
|
150 AUE_GETSOCKNAME COMPAT|NOARGS { int getsockname(int fdec, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_(*alen) \
|
|
|
|
caddr_t asa, \
|
|
|
|
_Inout_ int *alen); } getsockname \
|
2005-05-30 15:09:18 +00:00
|
|
|
getsockname_args int
|
1994-05-24 10:09:53 +00:00
|
|
|
|
|
|
|
; Syscalls 151-180 inclusive are reserved for vendor-specific
|
|
|
|
; system calls. (This includes various calls added for compatibity
|
|
|
|
; with other Unix variants.)
|
|
|
|
; Some of these calls are now supported by BSD...
|
2005-05-30 15:09:18 +00:00
|
|
|
151 AUE_NULL UNIMPL sem_lock (BSD/OS 2.x)
|
|
|
|
152 AUE_NULL UNIMPL sem_wakeup (BSD/OS 2.x)
|
|
|
|
153 AUE_NULL UNIMPL asyncdaemon (BSD/OS 2.x)
|
2008-03-26 15:23:12 +00:00
|
|
|
; 154 is initialised by the NLM code, if present.
|
2018-04-05 20:31:45 +00:00
|
|
|
154 AUE_NULL NOSTD { int nlm_syscall(int debug_level, \
|
|
|
|
int grace_period, int addr_count, \
|
|
|
|
_In_reads_(addr_count) \
|
|
|
|
char **addrs); }
|
1997-10-26 20:27:51 +00:00
|
|
|
; 155 is initialized by the NFS code, if present.
|
2018-04-05 20:31:45 +00:00
|
|
|
155 AUE_NFS_SVC NOSTD { int nfssvc(int flag, _In_ caddr_t argp); }
|
|
|
|
156 AUE_GETDIRENTRIES COMPAT { int getdirentries(int fd, \
|
|
|
|
_Out_writes_bytes_(count) char *buf, \
|
|
|
|
u_int count, _Out_ long *basep); }
|
|
|
|
157 AUE_STATFS COMPAT4 { int statfs(_In_z_ char *path, \
|
|
|
|
_Out_ struct ostatfs *buf); }
|
2006-07-28 19:05:28 +00:00
|
|
|
158 AUE_FSTATFS COMPAT4 { int fstatfs(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct ostatfs *buf); }
|
2005-05-30 15:09:18 +00:00
|
|
|
159 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
160 AUE_LGETFH STD { int lgetfh(_In_z_ char *fname, \
|
|
|
|
_Out_ struct fhandle *fhp); }
|
|
|
|
161 AUE_NFS_GETFH STD { int getfh(_In_z_ char *fname, \
|
|
|
|
_Out_ struct fhandle *fhp); }
|
|
|
|
162 AUE_SYSCTL COMPAT4 { int getdomainname( \
|
|
|
|
_Out_writes_z_(len) char *domainname, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int len); }
|
2018-04-05 20:31:45 +00:00
|
|
|
163 AUE_SYSCTL COMPAT4 { int setdomainname( \
|
|
|
|
_In_reads_z_(len) char *domainname, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int len); }
|
2018-04-05 20:31:45 +00:00
|
|
|
164 AUE_NULL COMPAT4 { int uname(_Out_ struct utsname *name); }
|
|
|
|
165 AUE_SYSARCH STD { int sysarch(int op, _In_z_ char *parms); }
|
2006-09-03 15:10:40 +00:00
|
|
|
166 AUE_RTPRIO STD { int rtprio(int function, pid_t pid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_ struct rtprio *rtp); }
|
2005-05-30 15:09:18 +00:00
|
|
|
167 AUE_NULL UNIMPL nosys
|
|
|
|
168 AUE_NULL UNIMPL nosys
|
2006-07-28 19:05:28 +00:00
|
|
|
169 AUE_SEMSYS NOSTD { int semsys(int which, int a2, int a3, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int a4, int a5); }
|
2003-12-23 03:51:36 +00:00
|
|
|
; XXX should be { int semsys(int which, ...); }
|
2006-07-28 19:05:28 +00:00
|
|
|
170 AUE_MSGSYS NOSTD { int msgsys(int which, int a2, int a3, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int a4, int a5, int a6); }
|
2003-12-23 03:51:36 +00:00
|
|
|
; XXX should be { int msgsys(int which, ...); }
|
2006-07-28 19:05:28 +00:00
|
|
|
171 AUE_SHMSYS NOSTD { int shmsys(int which, int a2, int a3, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int a4); }
|
2003-12-23 03:51:36 +00:00
|
|
|
; XXX should be { int shmsys(int which, ...); }
|
2005-05-30 15:09:18 +00:00
|
|
|
172 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
173 AUE_PREAD COMPAT6 { ssize_t pread(int fd, \
|
|
|
|
_Out_writes_bytes_(nbyte) void *buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nbyte, int pad, off_t offset); }
|
The lseek(2), mmap(2), truncate(2), ftruncate(2), pread(2), and
pwrite(2) syscalls are wrapped to provide compatibility with pre-7.x
kernels which required padding before the off_t parameter. The
fcntl(2) contains compatibility code to handle kernels before the
struct flock was changed during the 8.x CURRENT development. The
shims were reasonable to allow easier revert to the older kernel at
that time.
Now, two or three major releases later, shims do not serve any
purpose. Such old kernels cannot handle current libc, so revert the
compatibility code.
Make padded syscalls support conditional under the COMPAT6 config
option. For COMPAT32, the syscalls were under COMPAT6 already.
Remove WITHOUT_SYSCALL_COMPAT build option, which only purpose was to
(partially) disable the removed shims.
Reviewed by: jhb, imp (previous versions)
Discussed with: peter
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
2015-04-18 21:50:13 +00:00
|
|
|
174 AUE_PWRITE COMPAT6 { ssize_t pwrite(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_bytes_(nbyte) \
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
const void *buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nbyte, int pad, off_t offset); }
|
2017-03-29 22:33:56 +00:00
|
|
|
175 AUE_SETFIB STD { int setfib(int fibnum); }
|
2018-04-05 20:31:45 +00:00
|
|
|
176 AUE_NTP_ADJTIME STD { int ntp_adjtime(_Inout_ struct timex *tp); }
|
2005-05-30 15:09:18 +00:00
|
|
|
177 AUE_NULL UNIMPL sfork (BSD/OS 2.x)
|
|
|
|
178 AUE_NULL UNIMPL getdescriptor (BSD/OS 2.x)
|
|
|
|
179 AUE_NULL UNIMPL setdescriptor (BSD/OS 2.x)
|
|
|
|
180 AUE_NULL UNIMPL nosys
|
1999-08-05 08:18:45 +00:00
|
|
|
|
|
|
|
; Syscalls 181-199 are used by/reserved for BSD
|
2006-07-28 19:05:28 +00:00
|
|
|
181 AUE_SETGID STD { int setgid(gid_t gid); }
|
|
|
|
182 AUE_SETEGID STD { int setegid(gid_t egid); }
|
|
|
|
183 AUE_SETEUID STD { int seteuid(uid_t euid); }
|
2018-09-28 17:23:54 +00:00
|
|
|
184 AUE_NULL OBSOL lfs_bmapv
|
|
|
|
185 AUE_NULL OBSOL lfs_markv
|
|
|
|
186 AUE_NULL OBSOL lfs_segclean
|
|
|
|
187 AUE_NULL OBSOL lfs_segwait
|
2018-04-05 20:31:45 +00:00
|
|
|
188 AUE_STAT COMPAT11 { int stat(_In_z_ char *path, \
|
|
|
|
_Out_ struct freebsd11_stat *ub); }
|
Commit the 64-bit inode project.
Extend the ino_t, dev_t, nlink_t types to 64-bit ints. Modify
struct dirent layout to add d_off, increase the size of d_fileno
to 64-bits, increase the size of d_namlen to 16-bits, and change
the required alignment. Increase struct statfs f_mntfromname[] and
f_mntonname[] array length MNAMELEN to 1024.
ABI breakage is mitigated by providing compatibility using versioned
symbols, ingenious use of the existing padding in structures, and
by employing other tricks. Unfortunately, not everything can be
fixed, especially outside the base system. For instance, third-party
APIs which pass struct stat around are broken in backward and
forward incompatible ways.
Kinfo sysctl MIBs ABI is changed in backward-compatible way, but
there is no general mechanism to handle other sysctl MIBS which
return structures where the layout has changed. It was considered
that the breakage is either in the management interfaces, where we
usually allow ABI slip, or is not important.
Struct xvnode changed layout, no compat shims are provided.
For struct xtty, dev_t tty device member was reduced to uint32_t.
It was decided that keeping ABI compat in this case is more useful
than reporting 64-bit dev_t, for the sake of pstat.
Update note: strictly follow the instructions in UPDATING. Build
and install the new kernel with COMPAT_FREEBSD11 option enabled,
then reboot, and only then install new world.
Credits: The 64-bit inode project, also known as ino64, started life
many years ago as a project by Gleb Kurtsou (gleb). Kirk McKusick
(mckusick) then picked up and updated the patch, and acted as a
flag-waver. Feedback, suggestions, and discussions were carried
by Ed Maste (emaste), John Baldwin (jhb), Jilles Tjoelker (jilles),
and Rick Macklem (rmacklem). Kris Moore (kris) performed an initial
ports investigation followed by an exp-run by Antoine Brodin (antoine).
Essential and all-embracing testing was done by Peter Holm (pho).
The heavy lifting of coordinating all these efforts and bringing the
project to completion were done by Konstantin Belousov (kib).
Sponsored by: The FreeBSD Foundation (emaste, kib)
Differential revision: https://reviews.freebsd.org/D10439
2017-05-23 09:29:05 +00:00
|
|
|
189 AUE_FSTAT COMPAT11 { int fstat(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct freebsd11_stat *sb); }
|
|
|
|
190 AUE_LSTAT COMPAT11 { int lstat(_In_z_ char *path, \
|
|
|
|
_Out_ struct freebsd11_stat *ub); }
|
|
|
|
191 AUE_PATHCONF STD { int pathconf(_In_z_ char *path, int name); }
|
2006-07-28 19:05:28 +00:00
|
|
|
192 AUE_FPATHCONF STD { int fpathconf(int fd, int name); }
|
2005-05-30 15:09:18 +00:00
|
|
|
193 AUE_NULL UNIMPL nosys
|
2006-07-28 19:05:28 +00:00
|
|
|
194 AUE_GETRLIMIT STD { int getrlimit(u_int which, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct rlimit *rlp); } getrlimit \
|
2005-05-30 15:09:18 +00:00
|
|
|
__getrlimit_args int
|
2006-07-28 19:05:28 +00:00
|
|
|
195 AUE_SETRLIMIT STD { int setrlimit(u_int which, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct rlimit *rlp); } setrlimit \
|
2005-05-30 15:09:18 +00:00
|
|
|
__setrlimit_args int
|
2018-04-05 20:31:45 +00:00
|
|
|
196 AUE_GETDIRENTRIES COMPAT11 { int getdirentries(int fd, \
|
|
|
|
_Out_writes_bytes_(count) char *buf, \
|
|
|
|
u_int count, _Out_ long *basep); }
|
|
|
|
197 AUE_MMAP COMPAT6 { caddr_t mmap(_In_ caddr_t addr, size_t len, \
|
|
|
|
int prot, int flags, int fd, int pad, \
|
|
|
|
off_t pos); }
|
2008-09-25 20:07:42 +00:00
|
|
|
198 AUE_NULL NOPROTO { int nosys(void); } __syscall \
|
2005-05-30 15:09:18 +00:00
|
|
|
__syscall_args int
|
The lseek(2), mmap(2), truncate(2), ftruncate(2), pread(2), and
pwrite(2) syscalls are wrapped to provide compatibility with pre-7.x
kernels which required padding before the off_t parameter. The
fcntl(2) contains compatibility code to handle kernels before the
struct flock was changed during the 8.x CURRENT development. The
shims were reasonable to allow easier revert to the older kernel at
that time.
Now, two or three major releases later, shims do not serve any
purpose. Such old kernels cannot handle current libc, so revert the
compatibility code.
Make padded syscalls support conditional under the COMPAT6 config
option. For COMPAT32, the syscalls were under COMPAT6 already.
Remove WITHOUT_SYSCALL_COMPAT build option, which only purpose was to
(partially) disable the removed shims.
Reviewed by: jhb, imp (previous versions)
Discussed with: peter
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
2015-04-18 21:50:13 +00:00
|
|
|
199 AUE_LSEEK COMPAT6 { off_t lseek(int fd, int pad, \
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
off_t offset, int whence); }
|
2018-04-05 20:31:45 +00:00
|
|
|
200 AUE_TRUNCATE COMPAT6 { int truncate(_In_z_ char *path, int pad, \
|
2005-05-30 15:09:18 +00:00
|
|
|
off_t length); }
|
The lseek(2), mmap(2), truncate(2), ftruncate(2), pread(2), and
pwrite(2) syscalls are wrapped to provide compatibility with pre-7.x
kernels which required padding before the off_t parameter. The
fcntl(2) contains compatibility code to handle kernels before the
struct flock was changed during the 8.x CURRENT development. The
shims were reasonable to allow easier revert to the older kernel at
that time.
Now, two or three major releases later, shims do not serve any
purpose. Such old kernels cannot handle current libc, so revert the
compatibility code.
Make padded syscalls support conditional under the COMPAT6 config
option. For COMPAT32, the syscalls were under COMPAT6 already.
Remove WITHOUT_SYSCALL_COMPAT build option, which only purpose was to
(partially) disable the removed shims.
Reviewed by: jhb, imp (previous versions)
Discussed with: peter
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
2015-04-18 21:50:13 +00:00
|
|
|
201 AUE_FTRUNCATE COMPAT6 { int ftruncate(int fd, int pad, \
|
2005-05-30 15:09:18 +00:00
|
|
|
off_t length); }
|
2018-04-05 20:31:45 +00:00
|
|
|
202 AUE_SYSCTL STD { int __sysctl( \
|
|
|
|
_In_reads_(namelen) int *name, \
|
|
|
|
u_int namelen, \
|
|
|
|
_Out_writes_bytes_opt_(*oldlenp) \
|
|
|
|
void *old, \
|
|
|
|
_Inout_opt_ size_t *oldlenp, \
|
|
|
|
_In_reads_bytes_opt_(newlen) \
|
|
|
|
void *new, \
|
|
|
|
size_t newlen); } \
|
|
|
|
__sysctl sysctl_args int
|
|
|
|
203 AUE_MLOCK STD { int mlock(_In_ const void *addr, \
|
|
|
|
size_t len); }
|
|
|
|
204 AUE_MUNLOCK STD { int munlock(_In_ const void *addr, \
|
|
|
|
size_t len); }
|
|
|
|
205 AUE_UNDELETE STD { int undelete(_In_z_ char *path); }
|
|
|
|
206 AUE_FUTIMES STD { int futimes(int fd, \
|
|
|
|
_In_reads_(2) struct timeval *tptr); }
|
2006-07-28 19:05:28 +00:00
|
|
|
207 AUE_GETPGID STD { int getpgid(pid_t pid); }
|
2018-03-05 17:02:16 +00:00
|
|
|
208 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
209 AUE_POLL STD { int poll( \
|
|
|
|
_Inout_updates_(nfds) \
|
|
|
|
struct pollfd *fds, \
|
|
|
|
u_int nfds, int timeout); }
|
1994-08-19 11:45:29 +00:00
|
|
|
;
|
|
|
|
; The following are reserved for loadable syscalls
|
|
|
|
;
|
2010-06-28 18:06:46 +00:00
|
|
|
210 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
211 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
212 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
213 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
214 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
215 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
216 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
217 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
218 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
|
|
|
219 AUE_NULL NODEF|NOTSTATIC lkmnosys lkmnosys nosys_args int
|
1995-12-15 04:36:01 +00:00
|
|
|
|
2009-06-24 21:10:52 +00:00
|
|
|
220 AUE_SEMCTL COMPAT7|NOSTD { int __semctl(int semid, int semnum, \
|
|
|
|
int cmd, union semun_old *arg); }
|
2006-07-28 19:05:28 +00:00
|
|
|
221 AUE_SEMGET NOSTD { int semget(key_t key, int nsems, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int semflg); }
|
2018-04-05 20:31:45 +00:00
|
|
|
222 AUE_SEMOP NOSTD { int semop(int semid, \
|
|
|
|
_In_reads_(nsops) struct sembuf *sops, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nsops); }
|
2018-09-28 17:23:54 +00:00
|
|
|
223 AUE_NULL OBSOL semconfig
|
2009-06-24 21:10:52 +00:00
|
|
|
224 AUE_MSGCTL COMPAT7|NOSTD { int msgctl(int msqid, int cmd, \
|
|
|
|
struct msqid_ds_old *buf); }
|
2006-07-28 19:05:28 +00:00
|
|
|
225 AUE_MSGGET NOSTD { int msgget(key_t key, int msgflg); }
|
2018-04-05 20:31:45 +00:00
|
|
|
226 AUE_MSGSND NOSTD { int msgsnd(int msqid, \
|
|
|
|
_In_reads_bytes_(msgsz) const void *msgp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t msgsz, int msgflg); }
|
2018-04-05 20:31:45 +00:00
|
|
|
227 AUE_MSGRCV NOSTD { ssize_t msgrcv(int msqid, \
|
|
|
|
_Out_writes_bytes_(msgsz) void *msgp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t msgsz, long msgtyp, int msgflg); }
|
2018-04-05 20:31:45 +00:00
|
|
|
228 AUE_SHMAT NOSTD { int shmat(int shmid, \
|
|
|
|
_In_ const void *shmaddr, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int shmflg); }
|
2009-06-24 21:10:52 +00:00
|
|
|
229 AUE_SHMCTL COMPAT7|NOSTD { int shmctl(int shmid, int cmd, \
|
|
|
|
struct shmid_ds_old *buf); }
|
2018-04-05 20:31:45 +00:00
|
|
|
230 AUE_SHMDT NOSTD { int shmdt(_In_ const void *shmaddr); }
|
2006-07-28 19:05:28 +00:00
|
|
|
231 AUE_SHMGET NOSTD { int shmget(key_t key, size_t size, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int shmflg); }
|
1996-02-23 18:20:44 +00:00
|
|
|
;
|
2006-07-28 19:05:28 +00:00
|
|
|
232 AUE_NULL STD { int clock_gettime(clockid_t clock_id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct timespec *tp); }
|
|
|
|
233 AUE_CLOCK_SETTIME STD { int clock_settime(clockid_t clock_id, \
|
|
|
|
_In_ const struct timespec *tp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
234 AUE_NULL STD { int clock_getres(clockid_t clock_id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct timespec *tp); }
|
|
|
|
235 AUE_NULL STD { int ktimer_create( \
|
|
|
|
clockid_t clock_id, \
|
|
|
|
_In_ struct sigevent *evp, \
|
|
|
|
_Out_ int *timerid); }
|
2006-07-28 19:05:28 +00:00
|
|
|
236 AUE_NULL STD { int ktimer_delete(int timerid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
237 AUE_NULL STD { int ktimer_settime(int timerid, \
|
|
|
|
int flags, \
|
|
|
|
_In_ const struct itimerspec *value, \
|
|
|
|
_Out_opt_ struct itimerspec *ovalue); }
|
|
|
|
238 AUE_NULL STD { int ktimer_gettime(int timerid, \
|
|
|
|
_Out_ struct itimerspec *value); }
|
2006-07-28 19:05:28 +00:00
|
|
|
239 AUE_NULL STD { int ktimer_getoverrun(int timerid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
240 AUE_NULL STD { int nanosleep( \
|
|
|
|
_In_ const struct timespec *rqtp, \
|
|
|
|
_Out_opt_ struct timespec *rmtp); }
|
|
|
|
241 AUE_NULL STD { int ffclock_getcounter( \
|
|
|
|
_Out_ ffcounter *ffcount); }
|
2011-11-21 01:26:10 +00:00
|
|
|
242 AUE_NULL STD { int ffclock_setestimate( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct ffclock_estimate *cest); }
|
2011-11-21 01:26:10 +00:00
|
|
|
243 AUE_NULL STD { int ffclock_getestimate( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct ffclock_estimate *cest); }
|
2017-03-19 00:51:12 +00:00
|
|
|
244 AUE_NULL STD { int clock_nanosleep(clockid_t clock_id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int flags, \
|
|
|
|
_In_ const struct timespec *rqtp, \
|
|
|
|
_Out_opt_ struct timespec *rmtp); }
|
2005-05-30 15:09:18 +00:00
|
|
|
245 AUE_NULL UNIMPL nosys
|
|
|
|
246 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
247 AUE_NULL STD { int clock_getcpuclockid2(id_t id, \
|
|
|
|
int which, _Out_ clockid_t *clock_id); }
|
|
|
|
248 AUE_NULL STD { int ntp_gettime( \
|
|
|
|
_Out_ struct ntptimeval *ntvp); }
|
2005-05-30 15:09:18 +00:00
|
|
|
249 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
; syscall numbers initially used in OpenBSD
|
|
|
|
250 AUE_MINHERIT STD { int minherit( \
|
|
|
|
_In_ void *addr, \
|
|
|
|
size_t len, int inherit); }
|
2006-07-28 19:05:28 +00:00
|
|
|
251 AUE_RFORK STD { int rfork(int flags); }
|
2017-03-29 22:33:56 +00:00
|
|
|
252 AUE_POLL OBSOL openbsd_poll
|
2006-07-28 19:05:28 +00:00
|
|
|
253 AUE_ISSETUGID STD { int issetugid(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
254 AUE_LCHOWN STD { int lchown(_In_z_ char *path, int uid, \
|
|
|
|
int gid); }
|
|
|
|
255 AUE_AIO_READ STD { int aio_read( \
|
|
|
|
_Inout_ struct aiocb *aiocbp); }
|
|
|
|
256 AUE_AIO_WRITE STD { int aio_write( \
|
|
|
|
_Inout_ struct aiocb *aiocbp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
257 AUE_LIO_LISTIO STD { int lio_listio(int mode, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_updates_(nent) \
|
|
|
|
struct aiocb* const *acb_list, \
|
|
|
|
int nent, \
|
|
|
|
_In_opt_ struct sigevent *sig); }
|
2005-11-27 01:13:00 +00:00
|
|
|
258 AUE_NULL UNIMPL nosys
|
|
|
|
259 AUE_NULL UNIMPL nosys
|
|
|
|
260 AUE_NULL UNIMPL nosys
|
|
|
|
261 AUE_NULL UNIMPL nosys
|
|
|
|
262 AUE_NULL UNIMPL nosys
|
|
|
|
263 AUE_NULL UNIMPL nosys
|
2005-05-30 15:09:18 +00:00
|
|
|
264 AUE_NULL UNIMPL nosys
|
|
|
|
265 AUE_NULL UNIMPL nosys
|
|
|
|
266 AUE_NULL UNIMPL nosys
|
|
|
|
267 AUE_NULL UNIMPL nosys
|
|
|
|
268 AUE_NULL UNIMPL nosys
|
|
|
|
269 AUE_NULL UNIMPL nosys
|
|
|
|
270 AUE_NULL UNIMPL nosys
|
|
|
|
271 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
272 AUE_O_GETDENTS COMPAT11 { int getdents(int fd, \
|
|
|
|
_Out_writes_bytes_(count) char *buf, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t count); }
|
|
|
|
273 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
274 AUE_LCHMOD STD { int lchmod(_In_z_ char *path, mode_t mode); }
|
2018-07-10 13:32:04 +00:00
|
|
|
275 AUE_NULL OBSOL netbsd_lchown
|
2018-04-05 20:31:45 +00:00
|
|
|
276 AUE_LUTIMES STD { int lutimes(_In_z_ char *path, \
|
|
|
|
_In_ struct timeval *tptr); }
|
2018-07-10 13:32:04 +00:00
|
|
|
277 AUE_NULL OBSOL netbsd_msync
|
2018-04-05 20:31:45 +00:00
|
|
|
278 AUE_STAT COMPAT11 { int nstat(_In_z_ char *path, \
|
|
|
|
_Out_ struct nstat *ub); }
|
|
|
|
279 AUE_FSTAT COMPAT11 { int nfstat(int fd, _Out_ struct nstat *sb); }
|
|
|
|
280 AUE_LSTAT COMPAT11 { int nlstat(_In_z_ char *path, \
|
|
|
|
_Out_ struct nstat *ub); }
|
2005-05-30 15:09:18 +00:00
|
|
|
281 AUE_NULL UNIMPL nosys
|
|
|
|
282 AUE_NULL UNIMPL nosys
|
|
|
|
283 AUE_NULL UNIMPL nosys
|
|
|
|
284 AUE_NULL UNIMPL nosys
|
|
|
|
285 AUE_NULL UNIMPL nosys
|
|
|
|
286 AUE_NULL UNIMPL nosys
|
|
|
|
287 AUE_NULL UNIMPL nosys
|
|
|
|
288 AUE_NULL UNIMPL nosys
|
2018-04-05 20:31:45 +00:00
|
|
|
289 AUE_PREADV STD { ssize_t preadv(int fd, \
|
|
|
|
_In_reads_(iovcnt) \
|
|
|
|
struct iovec *iovp, \
|
|
|
|
u_int iovcnt, off_t offset); }
|
|
|
|
290 AUE_PWRITEV STD { ssize_t pwritev(int fd, \
|
|
|
|
_In_reads_(iovcnt) struct iovec *iovp, \
|
|
|
|
u_int iovcnt, off_t offset); }
|
2005-05-30 15:09:18 +00:00
|
|
|
291 AUE_NULL UNIMPL nosys
|
|
|
|
292 AUE_NULL UNIMPL nosys
|
|
|
|
293 AUE_NULL UNIMPL nosys
|
|
|
|
294 AUE_NULL UNIMPL nosys
|
|
|
|
295 AUE_NULL UNIMPL nosys
|
|
|
|
296 AUE_NULL UNIMPL nosys
|
2006-07-28 19:05:28 +00:00
|
|
|
297 AUE_FHSTATFS COMPAT4 { int fhstatfs( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ const struct fhandle *u_fhp, \
|
|
|
|
_Out_ struct ostatfs *buf); }
|
|
|
|
298 AUE_FHOPEN STD { int fhopen( \
|
|
|
|
_In_ const struct fhandle *u_fhp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
299 AUE_FHSTAT COMPAT11 { int fhstat( \
|
|
|
|
_In_ const struct fhandle *u_fhp, \
|
|
|
|
_Out_ struct freebsd11_stat *sb); }
|
2006-07-28 19:05:28 +00:00
|
|
|
300 AUE_NULL STD { int modnext(int modid); }
|
|
|
|
301 AUE_NULL STD { int modstat(int modid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct module_stat* stat); }
|
2006-07-28 19:05:28 +00:00
|
|
|
302 AUE_NULL STD { int modfnext(int modid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
303 AUE_NULL STD { int modfind(_In_z_ const char *name); }
|
|
|
|
304 AUE_MODLOAD STD { int kldload(_In_z_ const char *file); }
|
2006-07-28 19:05:28 +00:00
|
|
|
305 AUE_MODUNLOAD STD { int kldunload(int fileid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
306 AUE_NULL STD { int kldfind(_In_z_ const char *file); }
|
2006-07-28 19:05:28 +00:00
|
|
|
307 AUE_NULL STD { int kldnext(int fileid); }
|
2018-04-05 20:31:45 +00:00
|
|
|
308 AUE_NULL STD { int kldstat(int fileid, \
|
|
|
|
_Out_ struct kld_file_stat *stat); }
|
2006-07-28 19:05:28 +00:00
|
|
|
309 AUE_NULL STD { int kldfirstmod(int fileid); }
|
|
|
|
310 AUE_GETSID STD { int getsid(pid_t pid); }
|
|
|
|
311 AUE_SETRESUID STD { int setresuid(uid_t ruid, uid_t euid, \
|
2005-05-30 15:09:18 +00:00
|
|
|
uid_t suid); }
|
2006-07-28 19:05:28 +00:00
|
|
|
312 AUE_SETRESGID STD { int setresgid(gid_t rgid, gid_t egid, \
|
2005-05-30 15:09:18 +00:00
|
|
|
gid_t sgid); }
|
|
|
|
313 AUE_NULL OBSOL signanosleep
|
2018-04-05 20:31:45 +00:00
|
|
|
314 AUE_AIO_RETURN STD { ssize_t aio_return( \
|
|
|
|
_Inout_ struct aiocb *aiocbp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
315 AUE_AIO_SUSPEND STD { int aio_suspend( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_updates_(nent) \
|
|
|
|
struct aiocb * const * aiocbp, \
|
|
|
|
int nent, \
|
|
|
|
_In_opt_ \
|
2005-05-30 15:09:18 +00:00
|
|
|
const struct timespec *timeout); }
|
2017-03-29 22:33:56 +00:00
|
|
|
316 AUE_AIO_CANCEL STD { int aio_cancel(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ struct aiocb *aiocbp); }
|
|
|
|
317 AUE_AIO_ERROR STD { int aio_error( \
|
|
|
|
_In_ struct aiocb *aiocbp); }
|
|
|
|
318 AUE_AIO_READ COMPAT6 { int aio_read( \
|
|
|
|
_Inout_ struct oaiocb *aiocbp); }
|
|
|
|
319 AUE_AIO_WRITE COMPAT6 { int aio_write( \
|
|
|
|
_Inout_ struct oaiocb *aiocbp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
320 AUE_LIO_LISTIO COMPAT6 { int lio_listio(int mode, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_updates_(nent) \
|
2005-10-30 02:12:49 +00:00
|
|
|
struct oaiocb * const *acb_list, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int nent, \
|
|
|
|
_In_opt_ struct osigevent *sig); }
|
2006-07-28 19:05:28 +00:00
|
|
|
321 AUE_NULL STD { int yield(void); }
|
2005-05-30 15:09:18 +00:00
|
|
|
322 AUE_NULL OBSOL thr_sleep
|
|
|
|
323 AUE_NULL OBSOL thr_wakeup
|
2006-07-28 19:05:28 +00:00
|
|
|
324 AUE_MLOCKALL STD { int mlockall(int how); }
|
|
|
|
325 AUE_MUNLOCKALL STD { int munlockall(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
326 AUE_GETCWD STD { int __getcwd( \
|
|
|
|
_Out_writes_z_(buflen) char *buf, \
|
|
|
|
size_t buflen); }
|
2006-07-28 19:05:28 +00:00
|
|
|
327 AUE_NULL STD { int sched_setparam (pid_t pid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ const struct sched_param *param); }
|
|
|
|
328 AUE_NULL STD { int sched_getparam (pid_t pid, \
|
|
|
|
_Out_ struct sched_param *param); }
|
2006-07-28 19:05:28 +00:00
|
|
|
329 AUE_NULL STD { int sched_setscheduler (pid_t pid, int \
|
2018-04-05 20:31:45 +00:00
|
|
|
policy, _In_ const struct sched_param \
|
2005-05-30 15:09:18 +00:00
|
|
|
*param); }
|
2006-07-28 19:05:28 +00:00
|
|
|
330 AUE_NULL STD { int sched_getscheduler (pid_t pid); }
|
|
|
|
331 AUE_NULL STD { int sched_yield (void); }
|
|
|
|
332 AUE_NULL STD { int sched_get_priority_max (int policy); }
|
|
|
|
333 AUE_NULL STD { int sched_get_priority_min (int policy); }
|
|
|
|
334 AUE_NULL STD { int sched_rr_get_interval (pid_t pid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct timespec *interval); }
|
|
|
|
335 AUE_NULL STD { int utrace( \
|
|
|
|
_In_reads_bytes_(len) const void *addr, \
|
|
|
|
size_t len); }
|
2006-07-28 19:05:28 +00:00
|
|
|
336 AUE_SENDFILE COMPAT4 { int sendfile(int fd, int s, \
|
2005-05-30 15:09:18 +00:00
|
|
|
off_t offset, size_t nbytes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ struct sf_hdtr *hdtr, \
|
|
|
|
_Out_opt_ off_t *sbytes, int flags); }
|
2006-07-28 19:05:28 +00:00
|
|
|
337 AUE_NULL STD { int kldsym(int fileid, int cmd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ void *data); }
|
2018-08-16 19:09:43 +00:00
|
|
|
338 AUE_JAIL STD { int jail( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct jail *jail); }
|
|
|
|
|
2010-08-30 14:24:44 +00:00
|
|
|
339 AUE_NULL NOSTD|NOTSTATIC { int nnpfs_syscall(int operation, \
|
|
|
|
char *a_pathP, int a_opcode, \
|
2018-04-05 20:31:45 +00:00
|
|
|
void *a_paramsP, \
|
|
|
|
int a_followSymlinks); }
|
2006-07-28 19:05:28 +00:00
|
|
|
340 AUE_SIGPROCMASK STD { int sigprocmask(int how, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const sigset_t *set, \
|
|
|
|
_Out_opt_ sigset_t *oset); }
|
|
|
|
341 AUE_SIGSUSPEND STD { int sigsuspend( \
|
|
|
|
_In_ const sigset_t *sigmask); }
|
|
|
|
342 AUE_SIGACTION COMPAT4 { int sigaction(int sig, \
|
|
|
|
_In_opt_ const struct sigaction *act, \
|
|
|
|
_Out_opt_ struct sigaction *oact); }
|
|
|
|
343 AUE_SIGPENDING STD { int sigpending(_In_ sigset_t *set); }
|
2006-07-28 19:05:28 +00:00
|
|
|
344 AUE_SIGRETURN COMPAT4 { int sigreturn( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ const struct ucontext4 *sigcntxp); }
|
|
|
|
345 AUE_SIGWAIT STD { int sigtimedwait(_In_ const sigset_t *set, \
|
|
|
|
_Out_opt_ siginfo_t *info, \
|
|
|
|
_In_opt_ const struct timespec *timeout); }
|
|
|
|
346 AUE_NULL STD { int sigwaitinfo(_In_ const sigset_t *set, \
|
|
|
|
_Out_opt_ siginfo_t *info); }
|
|
|
|
347 AUE_ACL_GET_FILE STD { int __acl_get_file( \
|
|
|
|
_In_z_ const char *path, \
|
|
|
|
acl_type_t type, \
|
|
|
|
_Out_ struct acl *aclp); }
|
|
|
|
348 AUE_ACL_SET_FILE STD { int __acl_set_file( \
|
|
|
|
_In_z_ const char *path, \
|
|
|
|
acl_type_t type, _In_ struct acl *aclp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
349 AUE_ACL_GET_FD STD { int __acl_get_fd(int filedes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
acl_type_t type, _Out_ struct acl *aclp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
350 AUE_ACL_SET_FD STD { int __acl_set_fd(int filedes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
acl_type_t type, _In_ struct acl *aclp); }
|
|
|
|
351 AUE_ACL_DELETE_FILE STD { int __acl_delete_file( \
|
|
|
|
_In_z_ const char *path, \
|
2005-05-30 15:09:18 +00:00
|
|
|
acl_type_t type); }
|
2017-03-29 22:33:56 +00:00
|
|
|
352 AUE_ACL_DELETE_FD STD { int __acl_delete_fd(int filedes, \
|
2005-05-30 15:09:18 +00:00
|
|
|
acl_type_t type); }
|
2018-04-05 20:31:45 +00:00
|
|
|
353 AUE_ACL_CHECK_FILE STD { int __acl_aclcheck_file( \
|
|
|
|
_In_z_ const char *path, \
|
|
|
|
acl_type_t type, _In_ struct acl *aclp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
354 AUE_ACL_CHECK_FD STD { int __acl_aclcheck_fd(int filedes, \
|
2018-04-05 20:31:45 +00:00
|
|
|
acl_type_t type, _In_ struct acl *aclp); }
|
|
|
|
355 AUE_EXTATTRCTL STD { int extattrctl(_In_z_ const char *path, \
|
|
|
|
int cmd, _In_z_opt_ const char *filename, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname); }
|
2013-04-02 05:30:41 +00:00
|
|
|
356 AUE_EXTATTR_SET_FILE STD { ssize_t extattr_set_file( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_In_reads_bytes_(nbytes) void *data, \
|
2006-07-05 15:46:02 +00:00
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
357 AUE_EXTATTR_GET_FILE STD { ssize_t extattr_get_file( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_Out_writes_bytes_(nbytes) void *data, \
|
2006-07-05 15:46:02 +00:00
|
|
|
size_t nbytes); }
|
2018-04-05 20:31:45 +00:00
|
|
|
358 AUE_EXTATTR_DELETE_FILE STD { int extattr_delete_file( \
|
|
|
|
_In_z_ const char *path, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int attrnamespace, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *attrname); }
|
2017-03-29 22:33:56 +00:00
|
|
|
359 AUE_AIO_WAITCOMPLETE STD { ssize_t aio_waitcomplete( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Outptr_result_maybenull_ \
|
2005-05-30 15:09:18 +00:00
|
|
|
struct aiocb **aiocbp, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ struct timespec *timeout); }
|
|
|
|
360 AUE_GETRESUID STD { int getresuid(_Out_opt_ uid_t *ruid, \
|
|
|
|
_Out_opt_ uid_t *euid, \
|
|
|
|
_Out_opt_ uid_t *suid); }
|
|
|
|
361 AUE_GETRESGID STD { int getresgid(_Out_opt_ gid_t *rgid, \
|
|
|
|
_Out_opt_ gid_t *egid, \
|
|
|
|
_Out_opt_ gid_t *sgid); }
|
2006-09-03 15:10:40 +00:00
|
|
|
362 AUE_KQUEUE STD { int kqueue(void); }
|
Add abstime kqueue(2) timers and expand struct kevent members.
This change implements NOTE_ABSTIME flag for EVFILT_TIMER, which
specifies that the data field contains absolute time to fire the
event.
To make this useful, data member of the struct kevent must be extended
to 64bit. Using the opportunity, I also added ext members. This
changes struct kevent almost to Apple struct kevent64, except I did
not changed type of ident and udata, the later would cause serious API
incompatibilities.
The type of ident was kept uintptr_t since EVFILT_AIO returns a
pointer in this field, and e.g. CHERI is sensitive to the type
(discussed with brooks, jhb).
Unlike Apple kevent64, symbol versioning allows us to claim ABI
compatibility and still name the new syscall kevent(2). Compat shims
are provided for both host native and compat32.
Requested by: bapt
Reviewed by: bapt, brooks, ngie (previous version)
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D11025
2017-06-17 00:57:26 +00:00
|
|
|
363 AUE_KEVENT COMPAT11 { int kevent(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_opt_(nchanges) \
|
Add abstime kqueue(2) timers and expand struct kevent members.
This change implements NOTE_ABSTIME flag for EVFILT_TIMER, which
specifies that the data field contains absolute time to fire the
event.
To make this useful, data member of the struct kevent must be extended
to 64bit. Using the opportunity, I also added ext members. This
changes struct kevent almost to Apple struct kevent64, except I did
not changed type of ident and udata, the later would cause serious API
incompatibilities.
The type of ident was kept uintptr_t since EVFILT_AIO returns a
pointer in this field, and e.g. CHERI is sensitive to the type
(discussed with brooks, jhb).
Unlike Apple kevent64, symbol versioning allows us to claim ABI
compatibility and still name the new syscall kevent(2). Compat shims
are provided for both host native and compat32.
Requested by: bapt
Reviewed by: bapt, brooks, ngie (previous version)
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D11025
2017-06-17 00:57:26 +00:00
|
|
|
struct kevent_freebsd11 *changelist, \
|
|
|
|
int nchanges, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_opt_(nevents) \
|
Add abstime kqueue(2) timers and expand struct kevent members.
This change implements NOTE_ABSTIME flag for EVFILT_TIMER, which
specifies that the data field contains absolute time to fire the
event.
To make this useful, data member of the struct kevent must be extended
to 64bit. Using the opportunity, I also added ext members. This
changes struct kevent almost to Apple struct kevent64, except I did
not changed type of ident and udata, the later would cause serious API
incompatibilities.
The type of ident was kept uintptr_t since EVFILT_AIO returns a
pointer in this field, and e.g. CHERI is sensitive to the type
(discussed with brooks, jhb).
Unlike Apple kevent64, symbol versioning allows us to claim ABI
compatibility and still name the new syscall kevent(2). Compat shims
are provided for both host native and compat32.
Requested by: bapt
Reviewed by: bapt, brooks, ngie (previous version)
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D11025
2017-06-17 00:57:26 +00:00
|
|
|
struct kevent_freebsd11 *eventlist, \
|
|
|
|
int nevents, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const struct timespec *timeout); }
|
2018-09-28 17:23:54 +00:00
|
|
|
364 AUE_NULL OBSOL __cap_get_proc
|
|
|
|
365 AUE_NULL OBSOL __cap_set_proc
|
|
|
|
366 AUE_NULL OBSOL __cap_get_fd
|
|
|
|
367 AUE_NULL OBSOL __cap_get_file
|
|
|
|
368 AUE_NULL OBSOL __cap_set_fd
|
|
|
|
369 AUE_NULL OBSOL __cap_set_file
|
2008-09-25 20:07:42 +00:00
|
|
|
370 AUE_NULL UNIMPL nosys
|
2013-04-02 05:30:41 +00:00
|
|
|
371 AUE_EXTATTR_SET_FD STD { ssize_t extattr_set_fd(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_In_reads_bytes_(nbytes) void *data, \
|
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
372 AUE_EXTATTR_GET_FD STD { ssize_t extattr_get_fd(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_Out_writes_bytes_(nbytes) void *data, \
|
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
373 AUE_EXTATTR_DELETE_FD STD { int extattr_delete_fd(int fd, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int attrnamespace, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *attrname); }
|
2017-03-29 22:33:56 +00:00
|
|
|
374 AUE_SETUGID STD { int __setugid(int flag); }
|
2018-09-28 17:23:54 +00:00
|
|
|
375 AUE_NULL OBSOL nfsclnt
|
2018-04-05 20:31:45 +00:00
|
|
|
376 AUE_EACCESS STD { int eaccess(_In_z_ char *path, int amode); }
|
2010-08-30 14:24:44 +00:00
|
|
|
377 AUE_NULL NOSTD|NOTSTATIC { int afs3_syscall(long syscall, \
|
|
|
|
long parm1, long parm2, long parm3, \
|
|
|
|
long parm4, long parm5, long parm6); }
|
2018-04-05 20:31:45 +00:00
|
|
|
378 AUE_NMOUNT STD { int nmount( \
|
|
|
|
_In_reads_(iovcnt) struct iovec *iovp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
unsigned int iovcnt, int flags); }
|
2018-09-28 17:23:54 +00:00
|
|
|
379 AUE_NULL OBSOL kse_exit
|
|
|
|
380 AUE_NULL OBSOL kse_wakeup
|
|
|
|
381 AUE_NULL OBSOL kse_create
|
|
|
|
382 AUE_NULL OBSOL kse_thr_interrupt
|
|
|
|
383 AUE_NULL OBSOL kse_release
|
2018-04-05 20:31:45 +00:00
|
|
|
384 AUE_NULL STD { int __mac_get_proc( \
|
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
385 AUE_NULL STD { int __mac_set_proc( \
|
|
|
|
_In_ struct mac *mac_p); }
|
2006-07-28 19:05:28 +00:00
|
|
|
386 AUE_NULL STD { int __mac_get_fd(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
387 AUE_NULL STD { int __mac_get_file( \
|
|
|
|
_In_z_ const char *path_p, \
|
|
|
|
_In_ struct mac *mac_p); }
|
2006-07-28 19:05:28 +00:00
|
|
|
388 AUE_NULL STD { int __mac_set_fd(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
389 AUE_NULL STD { int __mac_set_file( \
|
|
|
|
_In_z_ const char *path_p, \
|
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
390 AUE_NULL STD { int kenv(int what, \
|
|
|
|
_In_z_opt_ const char *name, \
|
|
|
|
_Inout_updates_opt_(len) \
|
2005-05-30 15:09:18 +00:00
|
|
|
char *value, int len); }
|
2018-04-05 20:31:45 +00:00
|
|
|
391 AUE_LCHFLAGS STD { int lchflags(_In_z_ const char *path, \
|
2013-03-21 22:44:33 +00:00
|
|
|
u_long flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
392 AUE_NULL STD { int uuidgen( \
|
|
|
|
_Out_writes_(count) struct uuid *store, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int count); }
|
2018-04-05 20:31:45 +00:00
|
|
|
393 AUE_SENDFILE STD { int sendfile(int fd, int s, \
|
|
|
|
off_t offset, \
|
|
|
|
size_t nbytes, \
|
|
|
|
_In_opt_ struct sf_hdtr *hdtr, \
|
|
|
|
_Out_opt_ off_t *sbytes, int flags); }
|
|
|
|
394 AUE_NULL STD { int mac_syscall( \
|
|
|
|
_In_z_ const char *policy, \
|
|
|
|
int call, \
|
|
|
|
_In_opt_ void *arg); }
|
|
|
|
395 AUE_GETFSSTAT COMPAT11 { int getfsstat( \
|
|
|
|
_Out_writes_bytes_opt_(bufsize) \
|
|
|
|
struct freebsd11_statfs *buf, \
|
2016-12-27 20:21:11 +00:00
|
|
|
long bufsize, int mode); }
|
2018-04-05 20:31:45 +00:00
|
|
|
396 AUE_STATFS COMPAT11 { int statfs(_In_z_ char *path, \
|
|
|
|
_Out_ struct freebsd11_statfs *buf); }
|
Commit the 64-bit inode project.
Extend the ino_t, dev_t, nlink_t types to 64-bit ints. Modify
struct dirent layout to add d_off, increase the size of d_fileno
to 64-bits, increase the size of d_namlen to 16-bits, and change
the required alignment. Increase struct statfs f_mntfromname[] and
f_mntonname[] array length MNAMELEN to 1024.
ABI breakage is mitigated by providing compatibility using versioned
symbols, ingenious use of the existing padding in structures, and
by employing other tricks. Unfortunately, not everything can be
fixed, especially outside the base system. For instance, third-party
APIs which pass struct stat around are broken in backward and
forward incompatible ways.
Kinfo sysctl MIBs ABI is changed in backward-compatible way, but
there is no general mechanism to handle other sysctl MIBS which
return structures where the layout has changed. It was considered
that the breakage is either in the management interfaces, where we
usually allow ABI slip, or is not important.
Struct xvnode changed layout, no compat shims are provided.
For struct xtty, dev_t tty device member was reduced to uint32_t.
It was decided that keeping ABI compat in this case is more useful
than reporting 64-bit dev_t, for the sake of pstat.
Update note: strictly follow the instructions in UPDATING. Build
and install the new kernel with COMPAT_FREEBSD11 option enabled,
then reboot, and only then install new world.
Credits: The 64-bit inode project, also known as ino64, started life
many years ago as a project by Gleb Kurtsou (gleb). Kirk McKusick
(mckusick) then picked up and updated the patch, and acted as a
flag-waver. Feedback, suggestions, and discussions were carried
by Ed Maste (emaste), John Baldwin (jhb), Jilles Tjoelker (jilles),
and Rick Macklem (rmacklem). Kris Moore (kris) performed an initial
ports investigation followed by an exp-run by Antoine Brodin (antoine).
Essential and all-embracing testing was done by Peter Holm (pho).
The heavy lifting of coordinating all these efforts and bringing the
project to completion were done by Konstantin Belousov (kib).
Sponsored by: The FreeBSD Foundation (emaste, kib)
Differential revision: https://reviews.freebsd.org/D10439
2017-05-23 09:29:05 +00:00
|
|
|
397 AUE_FSTATFS COMPAT11 { int fstatfs(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ struct freebsd11_statfs *buf); }
|
|
|
|
398 AUE_FHSTATFS COMPAT11 { int fhstatfs( \
|
|
|
|
_In_ const struct fhandle *u_fhp, \
|
|
|
|
_Out_ struct freebsd11_statfs *buf); }
|
2005-05-30 15:09:18 +00:00
|
|
|
399 AUE_NULL UNIMPL nosys
|
2017-03-29 22:33:56 +00:00
|
|
|
400 AUE_SEMCLOSE NOSTD { int ksem_close(semid_t id); }
|
|
|
|
401 AUE_SEMPOST NOSTD { int ksem_post(semid_t id); }
|
|
|
|
402 AUE_SEMWAIT NOSTD { int ksem_wait(semid_t id); }
|
|
|
|
403 AUE_SEMTRYWAIT NOSTD { int ksem_trywait(semid_t id); }
|
2018-04-05 20:31:45 +00:00
|
|
|
404 AUE_SEMINIT NOSTD { int ksem_init(_Out_ semid_t *idp, \
|
2005-05-30 15:09:18 +00:00
|
|
|
unsigned int value); }
|
2018-04-05 20:31:45 +00:00
|
|
|
405 AUE_SEMOPEN NOSTD { int ksem_open(_Out_ semid_t *idp, \
|
|
|
|
_In_z_ const char *name, int oflag, \
|
2005-05-30 15:09:18 +00:00
|
|
|
mode_t mode, unsigned int value); }
|
2018-04-05 20:31:45 +00:00
|
|
|
406 AUE_SEMUNLINK NOSTD { int ksem_unlink( \
|
|
|
|
_In_z_ const char *name); }
|
|
|
|
407 AUE_SEMGETVALUE NOSTD { int ksem_getvalue(semid_t id, \
|
|
|
|
_Out_ int *val); }
|
2017-03-29 22:33:56 +00:00
|
|
|
408 AUE_SEMDESTROY NOSTD { int ksem_destroy(semid_t id); }
|
2006-07-28 19:05:28 +00:00
|
|
|
409 AUE_NULL STD { int __mac_get_pid(pid_t pid, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
410 AUE_NULL STD { int __mac_get_link( \
|
|
|
|
_In_z_ const char *path_p, \
|
|
|
|
_In_ struct mac *mac_p); }
|
|
|
|
411 AUE_NULL STD { int __mac_set_link( \
|
|
|
|
_In_z_ const char *path_p, \
|
|
|
|
_In_ struct mac *mac_p); }
|
2013-04-02 05:30:41 +00:00
|
|
|
412 AUE_EXTATTR_SET_LINK STD { ssize_t extattr_set_link( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_In_reads_bytes_(nbytes) void *data, \
|
2006-07-05 15:46:02 +00:00
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
413 AUE_EXTATTR_GET_LINK STD { ssize_t extattr_get_link( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname, \
|
|
|
|
_Out_writes_bytes_(nbytes) void *data, \
|
2006-07-05 15:46:02 +00:00
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
414 AUE_EXTATTR_DELETE_LINK STD { int extattr_delete_link( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_In_z_ const char *attrname); }
|
|
|
|
415 AUE_NULL STD { int __mac_execve(_In_z_ char *fname, \
|
|
|
|
_In_ char **argv, \
|
|
|
|
_In_ char **envv, \
|
|
|
|
_In_ struct mac *mac_p); }
|
2006-07-28 19:05:28 +00:00
|
|
|
416 AUE_SIGACTION STD { int sigaction(int sig, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const struct sigaction *act, \
|
|
|
|
_Out_opt_ struct sigaction *oact); }
|
2006-07-28 19:05:28 +00:00
|
|
|
417 AUE_SIGRETURN STD { int sigreturn( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ const struct __ucontext *sigcntxp); }
|
2005-05-30 15:09:18 +00:00
|
|
|
418 AUE_NULL UNIMPL __xstat
|
|
|
|
419 AUE_NULL UNIMPL __xfstat
|
|
|
|
420 AUE_NULL UNIMPL __xlstat
|
2018-04-05 20:31:45 +00:00
|
|
|
421 AUE_NULL STD { int getcontext( \
|
|
|
|
_Out_ struct __ucontext *ucp); }
|
2006-07-28 19:05:28 +00:00
|
|
|
422 AUE_NULL STD { int setcontext( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ const struct __ucontext *ucp); }
|
|
|
|
423 AUE_NULL STD { int swapcontext( \
|
|
|
|
_Out_ struct __ucontext *oucp, \
|
|
|
|
_In_ const struct __ucontext *ucp); }
|
|
|
|
424 AUE_SWAPOFF STD { int swapoff(_In_z_ const char *name); }
|
|
|
|
425 AUE_ACL_GET_LINK STD { int __acl_get_link( \
|
|
|
|
_In_z_ const char *path, acl_type_t type, \
|
|
|
|
_Out_ struct acl *aclp); }
|
|
|
|
426 AUE_ACL_SET_LINK STD { int __acl_set_link( \
|
|
|
|
_In_z_ const char *path, acl_type_t type, \
|
|
|
|
_In_ struct acl *aclp); }
|
|
|
|
427 AUE_ACL_DELETE_LINK STD { int __acl_delete_link( \
|
|
|
|
_In_z_ const char *path, \
|
2005-05-30 15:09:18 +00:00
|
|
|
acl_type_t type); }
|
2018-04-05 20:31:45 +00:00
|
|
|
428 AUE_ACL_CHECK_LINK STD { int __acl_aclcheck_link( \
|
|
|
|
_In_z_ const char *path, acl_type_t type, \
|
|
|
|
_In_ struct acl *aclp); }
|
|
|
|
429 AUE_SIGWAIT STD { int sigwait(_In_ const sigset_t *set, \
|
|
|
|
_Out_ int *sig); }
|
|
|
|
430 AUE_THR_CREATE STD { int thr_create(_In_ ucontext_t *ctx, \
|
|
|
|
_Out_ long *id, int flags); }
|
|
|
|
431 AUE_THR_EXIT STD { void thr_exit(_Out_opt_ long *state); }
|
|
|
|
432 AUE_NULL STD { int thr_self(_Out_ long *id); }
|
2017-03-29 22:33:56 +00:00
|
|
|
433 AUE_THR_KILL STD { int thr_kill(long id, int sig); }
|
2014-03-18 21:32:03 +00:00
|
|
|
434 AUE_NULL UNIMPL nosys
|
|
|
|
435 AUE_NULL UNIMPL nosys
|
2017-03-29 22:33:56 +00:00
|
|
|
436 AUE_JAIL_ATTACH STD { int jail_attach(int jid); }
|
2006-07-28 19:05:28 +00:00
|
|
|
437 AUE_EXTATTR_LIST_FD STD { ssize_t extattr_list_fd(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int attrnamespace, \
|
|
|
|
_Out_writes_bytes_opt_(nbytes) \
|
|
|
|
void *data, \
|
2005-05-30 15:09:18 +00:00
|
|
|
size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
438 AUE_EXTATTR_LIST_FILE STD { ssize_t extattr_list_file( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_Out_writes_bytes_opt_(nbytes) \
|
2005-05-30 15:09:18 +00:00
|
|
|
void *data, size_t nbytes); }
|
2006-07-28 19:05:28 +00:00
|
|
|
439 AUE_EXTATTR_LIST_LINK STD { ssize_t extattr_list_link( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ const char *path, \
|
|
|
|
int attrnamespace, \
|
|
|
|
_Out_writes_bytes_opt_(nbytes) \
|
2005-05-30 15:09:18 +00:00
|
|
|
void *data, size_t nbytes); }
|
2018-09-28 17:23:54 +00:00
|
|
|
440 AUE_NULL OBSOL kse_switchin
|
2017-03-29 22:33:56 +00:00
|
|
|
441 AUE_SEMWAIT NOSTD { int ksem_timedwait(semid_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const struct timespec *abstime); }
|
2006-07-28 19:05:28 +00:00
|
|
|
442 AUE_NULL STD { int thr_suspend( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const struct timespec *timeout); }
|
2006-07-28 19:05:28 +00:00
|
|
|
443 AUE_NULL STD { int thr_wake(long id); }
|
2006-09-03 15:10:40 +00:00
|
|
|
444 AUE_MODUNLOAD STD { int kldunloadf(int fileid, int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
445 AUE_AUDIT STD { int audit( \
|
|
|
|
_In_reads_bytes_(length) \
|
|
|
|
const void *record, \
|
2005-05-30 15:09:18 +00:00
|
|
|
u_int length); }
|
2018-04-05 20:31:45 +00:00
|
|
|
446 AUE_AUDITON STD { int auditon(int cmd, \
|
|
|
|
_In_opt_ void *data, \
|
2005-05-30 15:09:18 +00:00
|
|
|
u_int length); }
|
2018-04-05 20:31:45 +00:00
|
|
|
447 AUE_GETAUID STD { int getauid(_Out_ uid_t *auid); }
|
|
|
|
448 AUE_SETAUID STD { int setauid(_In_ uid_t *auid); }
|
|
|
|
449 AUE_GETAUDIT STD { int getaudit( \
|
|
|
|
_Out_ struct auditinfo *auditinfo); }
|
|
|
|
450 AUE_SETAUDIT STD { int setaudit( \
|
|
|
|
_In_ struct auditinfo *auditinfo); }
|
2006-07-28 19:05:28 +00:00
|
|
|
451 AUE_GETAUDIT_ADDR STD { int getaudit_addr( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_(length) \
|
2005-05-30 15:09:18 +00:00
|
|
|
struct auditinfo_addr *auditinfo_addr, \
|
|
|
|
u_int length); }
|
2006-07-28 19:05:28 +00:00
|
|
|
452 AUE_SETAUDIT_ADDR STD { int setaudit_addr( \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_bytes_(length) \
|
2005-05-30 15:09:18 +00:00
|
|
|
struct auditinfo_addr *auditinfo_addr, \
|
|
|
|
u_int length); }
|
2018-04-05 20:31:45 +00:00
|
|
|
453 AUE_AUDITCTL STD { int auditctl(_In_z_ char *path); }
|
|
|
|
454 AUE_NULL STD { int _umtx_op(_Inout_ void *obj, int op, \
|
|
|
|
u_long val, _In_ void *uaddr1, \
|
|
|
|
_In_ void *uaddr2); }
|
|
|
|
455 AUE_THR_NEW STD { int thr_new(_In_ struct thr_param *param, \
|
2005-05-30 15:09:18 +00:00
|
|
|
int param_size); }
|
2018-04-05 20:31:45 +00:00
|
|
|
456 AUE_NULL STD { int sigqueue(pid_t pid, int signum, \
|
|
|
|
_In_ void *value); }
|
|
|
|
|
|
|
|
457 AUE_MQ_OPEN NOSTD { int kmq_open( \
|
|
|
|
_In_z_ const char *path, \
|
|
|
|
int flags, \
|
|
|
|
mode_t mode, \
|
|
|
|
_In_opt_ const struct mq_attr *attr); }
|
|
|
|
458 AUE_MQ_SETATTR NOSTD { int kmq_setattr(int mqd, \
|
|
|
|
_In_opt_ const struct mq_attr *attr, \
|
|
|
|
_Out_opt_ struct mq_attr *oattr); }
|
|
|
|
459 AUE_MQ_TIMEDRECEIVE NOSTD { int kmq_timedreceive( \
|
|
|
|
int mqd, \
|
|
|
|
_Out_writes_bytes_(msg_len) char *msg_ptr, \
|
|
|
|
size_t msg_len, \
|
|
|
|
_Out_opt_ unsigned *msg_prio, \
|
|
|
|
_In_opt_ \
|
|
|
|
const struct timespec *abs_timeout); }
|
|
|
|
460 AUE_MQ_TIMEDSEND NOSTD { int kmq_timedsend(int mqd, \
|
|
|
|
_In_reads_bytes_(msg_len) \
|
|
|
|
const char *msg_ptr, size_t msg_len, \
|
|
|
|
unsigned msg_prio, \
|
|
|
|
_In_opt_ \
|
2005-11-27 01:13:00 +00:00
|
|
|
const struct timespec *abs_timeout); }
|
2018-04-05 20:31:45 +00:00
|
|
|
461 AUE_MQ_NOTIFY NOSTD { int kmq_notify(int mqd, \
|
|
|
|
_In_opt_ const struct sigevent *sigev); }
|
|
|
|
462 AUE_MQ_UNLINK NOSTD { int kmq_unlink(_In_z_ const char *path); }
|
|
|
|
463 AUE_NULL STD { int abort2(_In_z_ const char *why, \
|
|
|
|
int nargs, \
|
|
|
|
_In_reads_(nargs) void **args); }
|
|
|
|
464 AUE_NULL STD { int thr_set_name(long id, \
|
|
|
|
_In_z_ const char *name); }
|
|
|
|
465 AUE_AIO_FSYNC STD { int aio_fsync(int op, \
|
|
|
|
_In_ struct aiocb *aiocbp); }
|
2006-09-21 04:18:46 +00:00
|
|
|
466 AUE_RTPRIO STD { int rtprio_thread(int function, \
|
2018-04-05 20:31:45 +00:00
|
|
|
lwpid_t lwpid, \
|
|
|
|
_Inout_ struct rtprio *rtp); }
|
2006-09-21 04:18:46 +00:00
|
|
|
467 AUE_NULL UNIMPL nosys
|
|
|
|
468 AUE_NULL UNIMPL nosys
|
2006-08-16 22:32:50 +00:00
|
|
|
469 AUE_NULL UNIMPL __getpath_fromfd
|
|
|
|
470 AUE_NULL UNIMPL __getpath_fromaddr
|
2018-04-05 20:31:45 +00:00
|
|
|
471 AUE_SCTP_PEELOFF NOSTD { int sctp_peeloff(int sd, \
|
|
|
|
uint32_t name); }
|
|
|
|
472 AUE_SCTP_GENERIC_SENDMSG NOSTD { int sctp_generic_sendmsg( \
|
|
|
|
int sd, \
|
|
|
|
_In_reads_bytes_(mlen) caddr_t msg, \
|
|
|
|
int mlen, \
|
|
|
|
_In_reads_bytes_(tolen) \
|
|
|
|
caddr_t to, \
|
|
|
|
__socklen_t tolen, \
|
|
|
|
_In_opt_ struct sctp_sndrcvinfo *sinfo, \
|
|
|
|
int flags); }
|
|
|
|
473 AUE_SCTP_GENERIC_SENDMSG_IOV NOSTD { \
|
|
|
|
int sctp_generic_sendmsg_iov( \
|
|
|
|
int sd, \
|
|
|
|
_In_reads_(iovlen) struct iovec *iov, \
|
|
|
|
int iovlen, \
|
|
|
|
_In_reads_bytes_(tolen) \
|
|
|
|
caddr_t to, \
|
|
|
|
__socklen_t tolen, \
|
|
|
|
_In_opt_ struct sctp_sndrcvinfo *sinfo, \
|
|
|
|
int flags); }
|
|
|
|
474 AUE_SCTP_GENERIC_RECVMSG NOSTD { int sctp_generic_recvmsg( \
|
|
|
|
int sd, \
|
|
|
|
_In_reads_(iovlen) struct iovec *iov, \
|
|
|
|
int iovlen, \
|
|
|
|
_Out_writes_bytes_(*fromlenaddr) \
|
|
|
|
struct sockaddr *from, \
|
|
|
|
_Out_ __socklen_t *fromlenaddr, \
|
|
|
|
_In_opt_ struct sctp_sndrcvinfo *sinfo, \
|
|
|
|
_Out_opt_ int *msg_flags); }
|
|
|
|
475 AUE_PREAD STD { ssize_t pread(int fd, \
|
|
|
|
_Out_writes_bytes_(nbyte) void *buf, \
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
size_t nbyte, off_t offset); }
|
2018-04-05 20:31:45 +00:00
|
|
|
476 AUE_PWRITE STD { ssize_t pwrite(int fd, \
|
|
|
|
_In_reads_bytes_(nbyte) \
|
|
|
|
const void *buf, \
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
size_t nbyte, off_t offset); }
|
2018-04-05 20:31:45 +00:00
|
|
|
477 AUE_MMAP STD { caddr_t mmap(_In_ caddr_t addr, size_t len, \
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
int prot, int flags, int fd, off_t pos); }
|
|
|
|
478 AUE_LSEEK STD { off_t lseek(int fd, off_t offset, \
|
|
|
|
int whence); }
|
2018-04-05 20:31:45 +00:00
|
|
|
479 AUE_TRUNCATE STD { int truncate(_In_z_ char *path, \
|
|
|
|
off_t length); }
|
Create new syscalls for mmap(), lseek(), pread(), pwrite(), truncate() and
ftruncate(), but without the pad arg.
There are several reasons for this. Consider 'mmap()'. On AMD64, the
function call (and syscall) ABI allow for 6 register arguments. Additional
arguments go on the stack. mmap(2) has 6 arguments. However, the syscall
definition has an extra 'int pad' argument. This pushes it to 7 arguments,
which means one must spill into the memory stack. Since the kernel API
doesn't match userland API, we have a hack in libc - libc/sys/mmap.c.
This implements the userland API by calling __syscall() with an extra
argument and the pad argument, for a total of 8 args. This is all
unnecessary and inconvenient for several things, including the kernel's
syscall handler code which now has to handle merging stack arguments with
register arguments. It is a big deal for certain 3rd party code.
I'm adding libc glue to make the transition totally painless. I had
intended to mark the old syscalls as COMPAT6, but the potential to shoot
your feet by building a new kernel without COMPAT_FREEBSD6 but with a
slighly older userland was too great. For now, they have manual
"freebsd6_" prefixes rather than being COMPAT6. They will go back to
being marked 'COMPAT6' after 7-stable starts.
Approved by: re (kensmith)
2007-07-04 22:47:37 +00:00
|
|
|
480 AUE_FTRUNCATE STD { int ftruncate(int fd, off_t length); }
|
2017-03-29 22:33:56 +00:00
|
|
|
481 AUE_THR_KILL2 STD { int thr_kill2(pid_t pid, long id, int sig); }
|
2018-04-05 20:31:45 +00:00
|
|
|
482 AUE_SHMOPEN STD { int shm_open( \
|
|
|
|
_In_z_ const char *path, \
|
|
|
|
int flags, \
|
Add a new file descriptor type for IPC shared memory objects and use it to
implement shm_open(2) and shm_unlink(2) in the kernel:
- Each shared memory file descriptor is associated with a swap-backed vm
object which provides the backing store. Each descriptor starts off with
a size of zero, but the size can be altered via ftruncate(2). The shared
memory file descriptors also support fstat(2). read(2), write(2),
ioctl(2), select(2), poll(2), and kevent(2) are not supported on shared
memory file descriptors.
- shm_open(2) and shm_unlink(2) are now implemented as system calls that
manage shared memory file descriptors. The virtual namespace that maps
pathnames to shared memory file descriptors is implemented as a hash
table where the hash key is generated via the 32-bit Fowler/Noll/Vo hash
of the pathname.
- As an extension, the constant 'SHM_ANON' may be specified in place of the
path argument to shm_open(2). In this case, an unnamed shared memory
file descriptor will be created similar to the IPC_PRIVATE key for
shmget(2). Note that the shared memory object can still be shared among
processes by sharing the file descriptor via fork(2) or sendmsg(2), but
it is unnamed. This effectively serves to implement the getmemfd() idea
bandied about the lists several times over the years.
- The backing store for shared memory file descriptors are garbage
collected when they are not referenced by any open file descriptors or
the shm_open(2) virtual namespace.
Submitted by: dillon, peter (previous versions)
Submitted by: rwatson (I based this on his version)
Reviewed by: alc (suggested converting getmemfd() to shm_open())
2008-01-08 21:58:16 +00:00
|
|
|
mode_t mode); }
|
2018-04-05 20:31:45 +00:00
|
|
|
483 AUE_SHMUNLINK STD { int shm_unlink(_In_z_ const char *path); }
|
|
|
|
484 AUE_NULL STD { int cpuset(_Out_ cpusetid_t *setid); }
|
Add cpuset, an api for thread to cpu binding and cpu resource grouping
and assignment.
- Add a reference to a struct cpuset in each thread that is inherited from
the thread that created it.
- Release the reference when the thread is destroyed.
- Add prototypes for syscalls and macros for manipulating cpusets in
sys/cpuset.h
- Add syscalls to create, get, and set new numbered cpusets:
cpuset(), cpuset_{get,set}id()
- Add syscalls for getting and setting affinity masks for cpusets or
individual threads: cpuid_{get,set}affinity()
- Add types for the 'level' and 'which' parameters for the cpuset. This
will permit expansion of the api to cover cpu masks for other objects
identifiable with an id_t integer. For example, IRQs and Jails may be
coming soon.
- The root set 0 contains all valid cpus. All thread initially belong to
cpuset 1. This permits migrating all threads off of certain cpus to
reserve them for special applications.
Sponsored by: Nokia
Discussed with: arch, rwatson, brooks, davidxu, deischen
Reviewed by: antoine
2008-03-02 07:39:22 +00:00
|
|
|
485 AUE_NULL STD { int cpuset_setid(cpuwhich_t which, id_t id, \
|
|
|
|
cpusetid_t setid); }
|
|
|
|
486 AUE_NULL STD { int cpuset_getid(cpulevel_t level, \
|
|
|
|
cpuwhich_t which, id_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ cpusetid_t *setid); }
|
Add cpuset, an api for thread to cpu binding and cpu resource grouping
and assignment.
- Add a reference to a struct cpuset in each thread that is inherited from
the thread that created it.
- Release the reference when the thread is destroyed.
- Add prototypes for syscalls and macros for manipulating cpusets in
sys/cpuset.h
- Add syscalls to create, get, and set new numbered cpusets:
cpuset(), cpuset_{get,set}id()
- Add syscalls for getting and setting affinity masks for cpusets or
individual threads: cpuid_{get,set}affinity()
- Add types for the 'level' and 'which' parameters for the cpuset. This
will permit expansion of the api to cover cpu masks for other objects
identifiable with an id_t integer. For example, IRQs and Jails may be
coming soon.
- The root set 0 contains all valid cpus. All thread initially belong to
cpuset 1. This permits migrating all threads off of certain cpus to
reserve them for special applications.
Sponsored by: Nokia
Discussed with: arch, rwatson, brooks, davidxu, deischen
Reviewed by: antoine
2008-03-02 07:39:22 +00:00
|
|
|
487 AUE_NULL STD { int cpuset_getaffinity(cpulevel_t level, \
|
2018-04-05 20:31:45 +00:00
|
|
|
cpuwhich_t which, id_t id, \
|
|
|
|
size_t cpusetsize, \
|
|
|
|
_Out_ cpuset_t *mask); }
|
Add cpuset, an api for thread to cpu binding and cpu resource grouping
and assignment.
- Add a reference to a struct cpuset in each thread that is inherited from
the thread that created it.
- Release the reference when the thread is destroyed.
- Add prototypes for syscalls and macros for manipulating cpusets in
sys/cpuset.h
- Add syscalls to create, get, and set new numbered cpusets:
cpuset(), cpuset_{get,set}id()
- Add syscalls for getting and setting affinity masks for cpusets or
individual threads: cpuid_{get,set}affinity()
- Add types for the 'level' and 'which' parameters for the cpuset. This
will permit expansion of the api to cover cpu masks for other objects
identifiable with an id_t integer. For example, IRQs and Jails may be
coming soon.
- The root set 0 contains all valid cpus. All thread initially belong to
cpuset 1. This permits migrating all threads off of certain cpus to
reserve them for special applications.
Sponsored by: Nokia
Discussed with: arch, rwatson, brooks, davidxu, deischen
Reviewed by: antoine
2008-03-02 07:39:22 +00:00
|
|
|
488 AUE_NULL STD { int cpuset_setaffinity(cpulevel_t level, \
|
2018-04-05 20:31:45 +00:00
|
|
|
cpuwhich_t which, id_t id, \
|
|
|
|
size_t cpusetsize, \
|
|
|
|
_Out_ const cpuset_t *mask); }
|
|
|
|
489 AUE_FACCESSAT STD { int faccessat(int fd, _In_z_ char *path, \
|
|
|
|
int amode, int flag); }
|
|
|
|
490 AUE_FCHMODAT STD { int fchmodat(int fd, \
|
|
|
|
_In_z_ char *path, mode_t mode, \
|
|
|
|
int flag); }
|
|
|
|
491 AUE_FCHOWNAT STD { int fchownat(int fd, _In_z_ char *path, \
|
|
|
|
uid_t uid, gid_t gid, int flag); }
|
|
|
|
492 AUE_FEXECVE STD { int fexecve(int fd, \
|
|
|
|
_In_ char **argv, \
|
|
|
|
_In_ char **envv); }
|
|
|
|
493 AUE_FSTATAT COMPAT11 { int fstatat(int fd, _In_z_ char *path, \
|
|
|
|
_Out_ struct freebsd11_stat *buf, \
|
2008-03-31 12:06:55 +00:00
|
|
|
int flag); }
|
2018-04-05 20:31:45 +00:00
|
|
|
494 AUE_FUTIMESAT STD { int futimesat(int fd, \
|
|
|
|
_In_z_ char *path, \
|
|
|
|
_In_reads_(2) struct timeval *times); }
|
|
|
|
495 AUE_LINKAT STD { int linkat(int fd1, \
|
|
|
|
_In_z_ char *path1, \
|
|
|
|
int fd2, \
|
|
|
|
_In_z_ char *path2, \
|
2008-03-31 12:06:55 +00:00
|
|
|
int flag); }
|
2018-04-05 20:31:45 +00:00
|
|
|
496 AUE_MKDIRAT STD { int mkdirat(int fd, _In_z_ char *path, \
|
|
|
|
mode_t mode); }
|
|
|
|
497 AUE_MKFIFOAT STD { int mkfifoat(int fd, \
|
|
|
|
_In_z_ char *path, mode_t mode); }
|
|
|
|
498 AUE_MKNODAT COMPAT11 { int mknodat(int fd, _In_z_ char *path, \
|
|
|
|
mode_t mode, \
|
Commit the 64-bit inode project.
Extend the ino_t, dev_t, nlink_t types to 64-bit ints. Modify
struct dirent layout to add d_off, increase the size of d_fileno
to 64-bits, increase the size of d_namlen to 16-bits, and change
the required alignment. Increase struct statfs f_mntfromname[] and
f_mntonname[] array length MNAMELEN to 1024.
ABI breakage is mitigated by providing compatibility using versioned
symbols, ingenious use of the existing padding in structures, and
by employing other tricks. Unfortunately, not everything can be
fixed, especially outside the base system. For instance, third-party
APIs which pass struct stat around are broken in backward and
forward incompatible ways.
Kinfo sysctl MIBs ABI is changed in backward-compatible way, but
there is no general mechanism to handle other sysctl MIBS which
return structures where the layout has changed. It was considered
that the breakage is either in the management interfaces, where we
usually allow ABI slip, or is not important.
Struct xvnode changed layout, no compat shims are provided.
For struct xtty, dev_t tty device member was reduced to uint32_t.
It was decided that keeping ABI compat in this case is more useful
than reporting 64-bit dev_t, for the sake of pstat.
Update note: strictly follow the instructions in UPDATING. Build
and install the new kernel with COMPAT_FREEBSD11 option enabled,
then reboot, and only then install new world.
Credits: The 64-bit inode project, also known as ino64, started life
many years ago as a project by Gleb Kurtsou (gleb). Kirk McKusick
(mckusick) then picked up and updated the patch, and acted as a
flag-waver. Feedback, suggestions, and discussions were carried
by Ed Maste (emaste), John Baldwin (jhb), Jilles Tjoelker (jilles),
and Rick Macklem (rmacklem). Kris Moore (kris) performed an initial
ports investigation followed by an exp-run by Antoine Brodin (antoine).
Essential and all-embracing testing was done by Peter Holm (pho).
The heavy lifting of coordinating all these efforts and bringing the
project to completion were done by Konstantin Belousov (kib).
Sponsored by: The FreeBSD Foundation (emaste, kib)
Differential revision: https://reviews.freebsd.org/D10439
2017-05-23 09:29:05 +00:00
|
|
|
uint32_t dev); }
|
2008-03-31 12:06:55 +00:00
|
|
|
; XXX: see the comment for open
|
2018-04-05 20:31:45 +00:00
|
|
|
499 AUE_OPENAT_RWTC STD { int openat(int fd, _In_z_ char *path, \
|
|
|
|
int flag, mode_t mode); }
|
|
|
|
500 AUE_READLINKAT STD { int readlinkat(int fd, \
|
|
|
|
_In_z_ char *path, \
|
|
|
|
_Out_writes_bytes_(bufsize) char *buf, \
|
2008-03-31 12:06:55 +00:00
|
|
|
size_t bufsize); }
|
2018-04-05 20:31:45 +00:00
|
|
|
501 AUE_RENAMEAT STD { int renameat(int oldfd, \
|
|
|
|
_In_z_ char *old, \
|
|
|
|
int newfd, _In_z_ char *new); }
|
|
|
|
502 AUE_SYMLINKAT STD { int symlinkat(_In_z_ char *path1, int fd, \
|
|
|
|
_In_z_ char *path2); }
|
|
|
|
503 AUE_UNLINKAT STD { int unlinkat(int fd, _In_z_ char *path, \
|
|
|
|
int flag); }
|
2008-08-24 21:20:35 +00:00
|
|
|
504 AUE_POSIX_OPENPT STD { int posix_openpt(int flags); }
|
Implement support for RPCSEC_GSS authentication to both the NFS client
and server. This replaces the RPC implementation of the NFS client and
server with the newer RPC implementation originally developed
(actually ported from the userland sunrpc code) to support the NFS
Lock Manager. I have tested this code extensively and I believe it is
stable and that performance is at least equal to the legacy RPC
implementation.
The NFS code currently contains support for both the new RPC
implementation and the older legacy implementation inherited from the
original NFS codebase. The default is to use the new implementation -
add the NFS_LEGACYRPC option to fall back to the old code. When I
merge this support back to RELENG_7, I will probably change this so
that users have to 'opt in' to get the new code.
To use RPCSEC_GSS on either client or server, you must build a kernel
which includes the KGSSAPI option and the crypto device. On the
userland side, you must build at least a new libc, mountd, mount_nfs
and gssd. You must install new versions of /etc/rc.d/gssd and
/etc/rc.d/nfsd and add 'gssd_enable=YES' to /etc/rc.conf.
As long as gssd is running, you should be able to mount an NFS
filesystem from a server that requires RPCSEC_GSS authentication. The
mount itself can happen without any kerberos credentials but all
access to the filesystem will be denied unless the accessing user has
a valid ticket file in the standard place (/tmp/krb5cc_<uid>). There
is currently no support for situations where the ticket file is in a
different place, such as when the user logged in via SSH and has
delegated credentials from that login. This restriction is also
present in Solaris and Linux. In theory, we could improve this in
future, possibly using Brooks Davis' implementation of variant
symlinks.
Supporting RPCSEC_GSS on a server is nearly as simple. You must create
service creds for the server in the form 'nfs/<fqdn>@<REALM>' and
install them in /etc/krb5.keytab. The standard heimdal utility ktutil
makes this fairly easy. After the service creds have been created, you
can add a '-sec=krb5' option to /etc/exports and restart both mountd
and nfsd.
The only other difference an administrator should notice is that nfsd
doesn't fork to create service threads any more. In normal operation,
there will be two nfsd processes, one in userland waiting for TCP
connections and one in the kernel handling requests. The latter
process will create as many kthreads as required - these should be
visible via 'top -H'. The code has some support for varying the number
of service threads according to load but initially at least, nfsd uses
a fixed number of threads according to the value supplied to its '-n'
option.
Sponsored by: Isilon Systems
MFC after: 1 month
2008-11-03 10:38:00 +00:00
|
|
|
; 505 is initialised by the kgssapi code, if present.
|
2018-04-05 20:31:45 +00:00
|
|
|
505 AUE_NULL NOSTD { int gssd_syscall(_In_z_ char *path); }
|
|
|
|
506 AUE_JAIL_GET STD { int jail_get( \
|
|
|
|
_In_reads_(iovcnt) struct iovec *iovp, \
|
2009-04-29 21:14:15 +00:00
|
|
|
unsigned int iovcnt, int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
507 AUE_JAIL_SET STD { int jail_set( \
|
|
|
|
_In_reads_(iovcnt) struct iovec *iovp, \
|
2009-04-29 21:14:15 +00:00
|
|
|
unsigned int iovcnt, int flags); }
|
2017-03-29 22:33:56 +00:00
|
|
|
508 AUE_JAIL_REMOVE STD { int jail_remove(int jid); }
|
2009-06-15 20:38:55 +00:00
|
|
|
509 AUE_CLOSEFROM STD { int closefrom(int lowfd); }
|
2009-06-24 21:10:52 +00:00
|
|
|
510 AUE_SEMCTL NOSTD { int __semctl(int semid, int semnum, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int cmd, _Inout_ union semun *arg); }
|
2009-06-24 21:10:52 +00:00
|
|
|
511 AUE_MSGCTL NOSTD { int msgctl(int msqid, int cmd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ struct msqid_ds *buf); }
|
2009-06-24 21:10:52 +00:00
|
|
|
512 AUE_SHMCTL NOSTD { int shmctl(int shmid, int cmd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ struct shmid_ds *buf); }
|
|
|
|
513 AUE_LPATHCONF STD { int lpathconf(_In_z_ char *path, \
|
|
|
|
int name); }
|
Change the cap_rights_t type from uint64_t to a structure that we can extend
in the future in a backward compatible (API and ABI) way.
The cap_rights_t represents capability rights. We used to use one bit to
represent one right, but we are running out of spare bits. Currently the new
structure provides place for 114 rights (so 50 more than the previous
cap_rights_t), but it is possible to grow the structure to hold at least 285
rights, although we can make it even larger if 285 rights won't be enough.
The structure definition looks like this:
struct cap_rights {
uint64_t cr_rights[CAP_RIGHTS_VERSION + 2];
};
The initial CAP_RIGHTS_VERSION is 0.
The top two bits in the first element of the cr_rights[] array contain total
number of elements in the array - 2. This means if those two bits are equal to
0, we have 2 array elements.
The top two bits in all remaining array elements should be 0.
The next five bits in all array elements contain array index. Only one bit is
used and bit position in this five-bits range defines array index. This means
there can be at most five array elements in the future.
To define new right the CAPRIGHT() macro must be used. The macro takes two
arguments - an array index and a bit to set, eg.
#define CAP_PDKILL CAPRIGHT(1, 0x0000000000000800ULL)
We still support aliases that combine few rights, but the rights have to belong
to the same array element, eg:
#define CAP_LOOKUP CAPRIGHT(0, 0x0000000000000400ULL)
#define CAP_FCHMOD CAPRIGHT(0, 0x0000000000002000ULL)
#define CAP_FCHMODAT (CAP_FCHMOD | CAP_LOOKUP)
There is new API to manage the new cap_rights_t structure:
cap_rights_t *cap_rights_init(cap_rights_t *rights, ...);
void cap_rights_set(cap_rights_t *rights, ...);
void cap_rights_clear(cap_rights_t *rights, ...);
bool cap_rights_is_set(const cap_rights_t *rights, ...);
bool cap_rights_is_valid(const cap_rights_t *rights);
void cap_rights_merge(cap_rights_t *dst, const cap_rights_t *src);
void cap_rights_remove(cap_rights_t *dst, const cap_rights_t *src);
bool cap_rights_contains(const cap_rights_t *big, const cap_rights_t *little);
Capability rights to the cap_rights_init(), cap_rights_set(),
cap_rights_clear() and cap_rights_is_set() functions are provided by
separating them with commas, eg:
cap_rights_t rights;
cap_rights_init(&rights, CAP_READ, CAP_WRITE, CAP_FSTAT);
There is no need to terminate the list of rights, as those functions are
actually macros that take care of the termination, eg:
#define cap_rights_set(rights, ...) \
__cap_rights_set((rights), __VA_ARGS__, 0ULL)
void __cap_rights_set(cap_rights_t *rights, ...);
Thanks to using one bit as an array index we can assert in those functions that
there are no two rights belonging to different array elements provided
together. For example this is illegal and will be detected, because CAP_LOOKUP
belongs to element 0 and CAP_PDKILL to element 1:
cap_rights_init(&rights, CAP_LOOKUP | CAP_PDKILL);
Providing several rights that belongs to the same array's element this way is
correct, but is not advised. It should only be used for aliases definition.
This commit also breaks compatibility with some existing Capsicum system calls,
but I see no other way to do that. This should be fine as Capsicum is still
experimental and this change is not going to 9.x.
Sponsored by: The FreeBSD Foundation
2013-09-05 00:09:56 +00:00
|
|
|
514 AUE_NULL OBSOL cap_new
|
|
|
|
515 AUE_CAP_RIGHTS_GET STD { int __cap_rights_get(int version, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int fd, _Out_ cap_rights_t *rightsp); }
|
2011-03-01 13:23:37 +00:00
|
|
|
516 AUE_CAP_ENTER STD { int cap_enter(void); }
|
2018-04-05 20:31:45 +00:00
|
|
|
517 AUE_CAP_GETMODE STD { int cap_getmode(_Out_ u_int *modep); }
|
|
|
|
518 AUE_PDFORK STD { int pdfork(_Out_ int *fdp, int flags); }
|
Add experimental support for process descriptors
A "process descriptor" file descriptor is used to manage processes
without using the PID namespace. This is required for Capsicum's
Capability Mode, where the PID namespace is unavailable.
New system calls pdfork(2) and pdkill(2) offer the functional equivalents
of fork(2) and kill(2). pdgetpid(2) allows querying the PID of the remote
process for debugging purposes. The currently-unimplemented pdwait(2) will,
in the future, allow querying rusage/exit status. In the interim, poll(2)
may be used to check (and wait for) process termination.
When a process is referenced by a process descriptor, it does not issue
SIGCHLD to the parent, making it suitable for use in libraries---a common
scenario when using library compartmentalisation from within large
applications (such as web browsers). Some observers may note a similarity
to Mach task ports; process descriptors provide a subset of this behaviour,
but in a UNIX style.
This feature is enabled by "options PROCDESC", but as with several other
Capsicum kernel features, is not enabled by default in GENERIC 9.0.
Reviewed by: jhb, kib
Approved by: re (kib), mentor (rwatson)
Sponsored by: Google Inc
2011-08-18 22:51:30 +00:00
|
|
|
519 AUE_PDKILL STD { int pdkill(int fd, int signum); }
|
2018-04-05 20:31:45 +00:00
|
|
|
520 AUE_PDGETPID STD { int pdgetpid(int fd, _Out_ pid_t *pidp); }
|
Add experimental support for process descriptors
A "process descriptor" file descriptor is used to manage processes
without using the PID namespace. This is required for Capsicum's
Capability Mode, where the PID namespace is unavailable.
New system calls pdfork(2) and pdkill(2) offer the functional equivalents
of fork(2) and kill(2). pdgetpid(2) allows querying the PID of the remote
process for debugging purposes. The currently-unimplemented pdwait(2) will,
in the future, allow querying rusage/exit status. In the interim, poll(2)
may be used to check (and wait for) process termination.
When a process is referenced by a process descriptor, it does not issue
SIGCHLD to the parent, making it suitable for use in libraries---a common
scenario when using library compartmentalisation from within large
applications (such as web browsers). Some observers may note a similarity
to Mach task ports; process descriptors provide a subset of this behaviour,
but in a UNIX style.
This feature is enabled by "options PROCDESC", but as with several other
Capsicum kernel features, is not enabled by default in GENERIC 9.0.
Reviewed by: jhb, kib
Approved by: re (kib), mentor (rwatson)
Sponsored by: Google Inc
2011-08-18 22:51:30 +00:00
|
|
|
521 AUE_PDWAIT UNIMPL pdwait4
|
2018-04-05 20:31:45 +00:00
|
|
|
522 AUE_SELECT STD { int pselect(int nd, \
|
|
|
|
_Inout_opt_ fd_set *in, \
|
|
|
|
_Inout_opt_ fd_set *ou, \
|
|
|
|
_Inout_opt_ fd_set *ex, \
|
|
|
|
_In_opt_ const struct timespec *ts, \
|
|
|
|
_In_opt_ const sigset_t *sm); }
|
|
|
|
523 AUE_GETLOGINCLASS STD { int getloginclass( \
|
|
|
|
_Out_writes_z_(namelen) char *namebuf, \
|
2011-03-05 12:40:35 +00:00
|
|
|
size_t namelen); }
|
2018-04-05 20:31:45 +00:00
|
|
|
524 AUE_SETLOGINCLASS STD { int setloginclass( \
|
|
|
|
_In_z_ const char *namebuf); }
|
|
|
|
525 AUE_NULL STD { int rctl_get_racct( \
|
|
|
|
_In_reads_bytes_(inbuflen) \
|
|
|
|
const void *inbufp, size_t inbuflen, \
|
|
|
|
_Out_writes_bytes_(outbuflen) \
|
|
|
|
void *outbufp, size_t outbuflen); }
|
|
|
|
526 AUE_NULL STD { int rctl_get_rules( \
|
|
|
|
_In_reads_bytes_(inbuflen) \
|
|
|
|
const void *inbufp, size_t inbuflen, \
|
|
|
|
_Out_writes_bytes_(outbuflen) \
|
|
|
|
void *outbufp, size_t outbuflen); }
|
|
|
|
527 AUE_NULL STD { int rctl_get_limits( \
|
|
|
|
_In_reads_bytes_(inbuflen) \
|
|
|
|
const void *inbufp, size_t inbuflen, \
|
|
|
|
_Out_writes_bytes_(outbuflen) \
|
|
|
|
void *outbufp, size_t outbuflen); }
|
|
|
|
528 AUE_NULL STD { int rctl_add_rule( \
|
|
|
|
_In_reads_bytes_(inbuflen) \
|
|
|
|
const void *inbufp, size_t inbuflen, \
|
|
|
|
_Out_writes_bytes_(outbuflen) \
|
|
|
|
void *outbufp, size_t outbuflen); }
|
|
|
|
529 AUE_NULL STD { int rctl_remove_rule( \
|
|
|
|
_In_reads_bytes_(inbuflen) \
|
|
|
|
const void *inbufp, size_t inbuflen, \
|
|
|
|
_Out_writes_bytes_(outbuflen) \
|
|
|
|
void *outbufp, size_t outbuflen); }
|
2017-03-29 22:33:56 +00:00
|
|
|
530 AUE_POSIX_FALLOCATE STD { int posix_fallocate(int fd, \
|
2011-04-18 16:32:22 +00:00
|
|
|
off_t offset, off_t len); }
|
2018-04-05 20:31:45 +00:00
|
|
|
531 AUE_POSIX_FADVISE STD { int posix_fadvise(int fd, \
|
|
|
|
off_t offset, \
|
2011-11-04 04:02:50 +00:00
|
|
|
off_t len, int advice); }
|
2013-09-12 17:52:18 +00:00
|
|
|
532 AUE_WAIT6 STD { int wait6(idtype_t idtype, id_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_opt_ int *status, int options, \
|
|
|
|
_Out_opt_ struct __wrusage *wrusage, \
|
|
|
|
_Out_opt_ siginfo_t *info); }
|
Merge Capsicum overhaul:
- Capability is no longer separate descriptor type. Now every descriptor
has set of its own capability rights.
- The cap_new(2) system call is left, but it is no longer documented and
should not be used in new code.
- The new syscall cap_rights_limit(2) should be used instead of
cap_new(2), which limits capability rights of the given descriptor
without creating a new one.
- The cap_getrights(2) syscall is renamed to cap_rights_get(2).
- If CAP_IOCTL capability right is present we can further reduce allowed
ioctls list with the new cap_ioctls_limit(2) syscall. List of allowed
ioctls can be retrived with cap_ioctls_get(2) syscall.
- If CAP_FCNTL capability right is present we can further reduce fcntls
that can be used with the new cap_fcntls_limit(2) syscall and retrive
them with cap_fcntls_get(2).
- To support ioctl and fcntl white-listing the filedesc structure was
heavly modified.
- The audit subsystem, kdump and procstat tools were updated to
recognize new syscalls.
- Capability rights were revised and eventhough I tried hard to provide
backward API and ABI compatibility there are some incompatible changes
that are described in detail below:
CAP_CREATE old behaviour:
- Allow for openat(2)+O_CREAT.
- Allow for linkat(2).
- Allow for symlinkat(2).
CAP_CREATE new behaviour:
- Allow for openat(2)+O_CREAT.
Added CAP_LINKAT:
- Allow for linkat(2). ABI: Reuses CAP_RMDIR bit.
- Allow to be target for renameat(2).
Added CAP_SYMLINKAT:
- Allow for symlinkat(2).
Removed CAP_DELETE. Old behaviour:
- Allow for unlinkat(2) when removing non-directory object.
- Allow to be source for renameat(2).
Removed CAP_RMDIR. Old behaviour:
- Allow for unlinkat(2) when removing directory.
Added CAP_RENAMEAT:
- Required for source directory for the renameat(2) syscall.
Added CAP_UNLINKAT (effectively it replaces CAP_DELETE and CAP_RMDIR):
- Allow for unlinkat(2) on any object.
- Required if target of renameat(2) exists and will be removed by this
call.
Removed CAP_MAPEXEC.
CAP_MMAP old behaviour:
- Allow for mmap(2) with any combination of PROT_NONE, PROT_READ and
PROT_WRITE.
CAP_MMAP new behaviour:
- Allow for mmap(2)+PROT_NONE.
Added CAP_MMAP_R:
- Allow for mmap(PROT_READ).
Added CAP_MMAP_W:
- Allow for mmap(PROT_WRITE).
Added CAP_MMAP_X:
- Allow for mmap(PROT_EXEC).
Added CAP_MMAP_RW:
- Allow for mmap(PROT_READ | PROT_WRITE).
Added CAP_MMAP_RX:
- Allow for mmap(PROT_READ | PROT_EXEC).
Added CAP_MMAP_WX:
- Allow for mmap(PROT_WRITE | PROT_EXEC).
Added CAP_MMAP_RWX:
- Allow for mmap(PROT_READ | PROT_WRITE | PROT_EXEC).
Renamed CAP_MKDIR to CAP_MKDIRAT.
Renamed CAP_MKFIFO to CAP_MKFIFOAT.
Renamed CAP_MKNODE to CAP_MKNODEAT.
CAP_READ old behaviour:
- Allow pread(2).
- Disallow read(2), readv(2) (if there is no CAP_SEEK).
CAP_READ new behaviour:
- Allow read(2), readv(2).
- Disallow pread(2) (CAP_SEEK was also required).
CAP_WRITE old behaviour:
- Allow pwrite(2).
- Disallow write(2), writev(2) (if there is no CAP_SEEK).
CAP_WRITE new behaviour:
- Allow write(2), writev(2).
- Disallow pwrite(2) (CAP_SEEK was also required).
Added convinient defines:
#define CAP_PREAD (CAP_SEEK | CAP_READ)
#define CAP_PWRITE (CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_R (CAP_MMAP | CAP_SEEK | CAP_READ)
#define CAP_MMAP_W (CAP_MMAP | CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_X (CAP_MMAP | CAP_SEEK | 0x0000000000000008ULL)
#define CAP_MMAP_RW (CAP_MMAP_R | CAP_MMAP_W)
#define CAP_MMAP_RX (CAP_MMAP_R | CAP_MMAP_X)
#define CAP_MMAP_WX (CAP_MMAP_W | CAP_MMAP_X)
#define CAP_MMAP_RWX (CAP_MMAP_R | CAP_MMAP_W | CAP_MMAP_X)
#define CAP_RECV CAP_READ
#define CAP_SEND CAP_WRITE
#define CAP_SOCK_CLIENT \
(CAP_CONNECT | CAP_GETPEERNAME | CAP_GETSOCKNAME | CAP_GETSOCKOPT | \
CAP_PEELOFF | CAP_RECV | CAP_SEND | CAP_SETSOCKOPT | CAP_SHUTDOWN)
#define CAP_SOCK_SERVER \
(CAP_ACCEPT | CAP_BIND | CAP_GETPEERNAME | CAP_GETSOCKNAME | \
CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \
CAP_SETSOCKOPT | CAP_SHUTDOWN)
Added defines for backward API compatibility:
#define CAP_MAPEXEC CAP_MMAP_X
#define CAP_DELETE CAP_UNLINKAT
#define CAP_MKDIR CAP_MKDIRAT
#define CAP_RMDIR CAP_UNLINKAT
#define CAP_MKFIFO CAP_MKFIFOAT
#define CAP_MKNOD CAP_MKNODAT
#define CAP_SOCK_ALL (CAP_SOCK_CLIENT | CAP_SOCK_SERVER)
Sponsored by: The FreeBSD Foundation
Reviewed by: Christoph Mallon <christoph.mallon@gmx.de>
Many aspects discussed with: rwatson, benl, jonathan
ABI compatibility discussed with: kib
2013-03-02 00:53:12 +00:00
|
|
|
533 AUE_CAP_RIGHTS_LIMIT STD { int cap_rights_limit(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_ cap_rights_t *rightsp); }
|
Merge Capsicum overhaul:
- Capability is no longer separate descriptor type. Now every descriptor
has set of its own capability rights.
- The cap_new(2) system call is left, but it is no longer documented and
should not be used in new code.
- The new syscall cap_rights_limit(2) should be used instead of
cap_new(2), which limits capability rights of the given descriptor
without creating a new one.
- The cap_getrights(2) syscall is renamed to cap_rights_get(2).
- If CAP_IOCTL capability right is present we can further reduce allowed
ioctls list with the new cap_ioctls_limit(2) syscall. List of allowed
ioctls can be retrived with cap_ioctls_get(2) syscall.
- If CAP_FCNTL capability right is present we can further reduce fcntls
that can be used with the new cap_fcntls_limit(2) syscall and retrive
them with cap_fcntls_get(2).
- To support ioctl and fcntl white-listing the filedesc structure was
heavly modified.
- The audit subsystem, kdump and procstat tools were updated to
recognize new syscalls.
- Capability rights were revised and eventhough I tried hard to provide
backward API and ABI compatibility there are some incompatible changes
that are described in detail below:
CAP_CREATE old behaviour:
- Allow for openat(2)+O_CREAT.
- Allow for linkat(2).
- Allow for symlinkat(2).
CAP_CREATE new behaviour:
- Allow for openat(2)+O_CREAT.
Added CAP_LINKAT:
- Allow for linkat(2). ABI: Reuses CAP_RMDIR bit.
- Allow to be target for renameat(2).
Added CAP_SYMLINKAT:
- Allow for symlinkat(2).
Removed CAP_DELETE. Old behaviour:
- Allow for unlinkat(2) when removing non-directory object.
- Allow to be source for renameat(2).
Removed CAP_RMDIR. Old behaviour:
- Allow for unlinkat(2) when removing directory.
Added CAP_RENAMEAT:
- Required for source directory for the renameat(2) syscall.
Added CAP_UNLINKAT (effectively it replaces CAP_DELETE and CAP_RMDIR):
- Allow for unlinkat(2) on any object.
- Required if target of renameat(2) exists and will be removed by this
call.
Removed CAP_MAPEXEC.
CAP_MMAP old behaviour:
- Allow for mmap(2) with any combination of PROT_NONE, PROT_READ and
PROT_WRITE.
CAP_MMAP new behaviour:
- Allow for mmap(2)+PROT_NONE.
Added CAP_MMAP_R:
- Allow for mmap(PROT_READ).
Added CAP_MMAP_W:
- Allow for mmap(PROT_WRITE).
Added CAP_MMAP_X:
- Allow for mmap(PROT_EXEC).
Added CAP_MMAP_RW:
- Allow for mmap(PROT_READ | PROT_WRITE).
Added CAP_MMAP_RX:
- Allow for mmap(PROT_READ | PROT_EXEC).
Added CAP_MMAP_WX:
- Allow for mmap(PROT_WRITE | PROT_EXEC).
Added CAP_MMAP_RWX:
- Allow for mmap(PROT_READ | PROT_WRITE | PROT_EXEC).
Renamed CAP_MKDIR to CAP_MKDIRAT.
Renamed CAP_MKFIFO to CAP_MKFIFOAT.
Renamed CAP_MKNODE to CAP_MKNODEAT.
CAP_READ old behaviour:
- Allow pread(2).
- Disallow read(2), readv(2) (if there is no CAP_SEEK).
CAP_READ new behaviour:
- Allow read(2), readv(2).
- Disallow pread(2) (CAP_SEEK was also required).
CAP_WRITE old behaviour:
- Allow pwrite(2).
- Disallow write(2), writev(2) (if there is no CAP_SEEK).
CAP_WRITE new behaviour:
- Allow write(2), writev(2).
- Disallow pwrite(2) (CAP_SEEK was also required).
Added convinient defines:
#define CAP_PREAD (CAP_SEEK | CAP_READ)
#define CAP_PWRITE (CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_R (CAP_MMAP | CAP_SEEK | CAP_READ)
#define CAP_MMAP_W (CAP_MMAP | CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_X (CAP_MMAP | CAP_SEEK | 0x0000000000000008ULL)
#define CAP_MMAP_RW (CAP_MMAP_R | CAP_MMAP_W)
#define CAP_MMAP_RX (CAP_MMAP_R | CAP_MMAP_X)
#define CAP_MMAP_WX (CAP_MMAP_W | CAP_MMAP_X)
#define CAP_MMAP_RWX (CAP_MMAP_R | CAP_MMAP_W | CAP_MMAP_X)
#define CAP_RECV CAP_READ
#define CAP_SEND CAP_WRITE
#define CAP_SOCK_CLIENT \
(CAP_CONNECT | CAP_GETPEERNAME | CAP_GETSOCKNAME | CAP_GETSOCKOPT | \
CAP_PEELOFF | CAP_RECV | CAP_SEND | CAP_SETSOCKOPT | CAP_SHUTDOWN)
#define CAP_SOCK_SERVER \
(CAP_ACCEPT | CAP_BIND | CAP_GETPEERNAME | CAP_GETSOCKNAME | \
CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \
CAP_SETSOCKOPT | CAP_SHUTDOWN)
Added defines for backward API compatibility:
#define CAP_MAPEXEC CAP_MMAP_X
#define CAP_DELETE CAP_UNLINKAT
#define CAP_MKDIR CAP_MKDIRAT
#define CAP_RMDIR CAP_UNLINKAT
#define CAP_MKFIFO CAP_MKFIFOAT
#define CAP_MKNOD CAP_MKNODAT
#define CAP_SOCK_ALL (CAP_SOCK_CLIENT | CAP_SOCK_SERVER)
Sponsored by: The FreeBSD Foundation
Reviewed by: Christoph Mallon <christoph.mallon@gmx.de>
Many aspects discussed with: rwatson, benl, jonathan
ABI compatibility discussed with: kib
2013-03-02 00:53:12 +00:00
|
|
|
534 AUE_CAP_IOCTLS_LIMIT STD { int cap_ioctls_limit(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_(ncmds) const u_long *cmds, \
|
|
|
|
size_t ncmds); }
|
Merge Capsicum overhaul:
- Capability is no longer separate descriptor type. Now every descriptor
has set of its own capability rights.
- The cap_new(2) system call is left, but it is no longer documented and
should not be used in new code.
- The new syscall cap_rights_limit(2) should be used instead of
cap_new(2), which limits capability rights of the given descriptor
without creating a new one.
- The cap_getrights(2) syscall is renamed to cap_rights_get(2).
- If CAP_IOCTL capability right is present we can further reduce allowed
ioctls list with the new cap_ioctls_limit(2) syscall. List of allowed
ioctls can be retrived with cap_ioctls_get(2) syscall.
- If CAP_FCNTL capability right is present we can further reduce fcntls
that can be used with the new cap_fcntls_limit(2) syscall and retrive
them with cap_fcntls_get(2).
- To support ioctl and fcntl white-listing the filedesc structure was
heavly modified.
- The audit subsystem, kdump and procstat tools were updated to
recognize new syscalls.
- Capability rights were revised and eventhough I tried hard to provide
backward API and ABI compatibility there are some incompatible changes
that are described in detail below:
CAP_CREATE old behaviour:
- Allow for openat(2)+O_CREAT.
- Allow for linkat(2).
- Allow for symlinkat(2).
CAP_CREATE new behaviour:
- Allow for openat(2)+O_CREAT.
Added CAP_LINKAT:
- Allow for linkat(2). ABI: Reuses CAP_RMDIR bit.
- Allow to be target for renameat(2).
Added CAP_SYMLINKAT:
- Allow for symlinkat(2).
Removed CAP_DELETE. Old behaviour:
- Allow for unlinkat(2) when removing non-directory object.
- Allow to be source for renameat(2).
Removed CAP_RMDIR. Old behaviour:
- Allow for unlinkat(2) when removing directory.
Added CAP_RENAMEAT:
- Required for source directory for the renameat(2) syscall.
Added CAP_UNLINKAT (effectively it replaces CAP_DELETE and CAP_RMDIR):
- Allow for unlinkat(2) on any object.
- Required if target of renameat(2) exists and will be removed by this
call.
Removed CAP_MAPEXEC.
CAP_MMAP old behaviour:
- Allow for mmap(2) with any combination of PROT_NONE, PROT_READ and
PROT_WRITE.
CAP_MMAP new behaviour:
- Allow for mmap(2)+PROT_NONE.
Added CAP_MMAP_R:
- Allow for mmap(PROT_READ).
Added CAP_MMAP_W:
- Allow for mmap(PROT_WRITE).
Added CAP_MMAP_X:
- Allow for mmap(PROT_EXEC).
Added CAP_MMAP_RW:
- Allow for mmap(PROT_READ | PROT_WRITE).
Added CAP_MMAP_RX:
- Allow for mmap(PROT_READ | PROT_EXEC).
Added CAP_MMAP_WX:
- Allow for mmap(PROT_WRITE | PROT_EXEC).
Added CAP_MMAP_RWX:
- Allow for mmap(PROT_READ | PROT_WRITE | PROT_EXEC).
Renamed CAP_MKDIR to CAP_MKDIRAT.
Renamed CAP_MKFIFO to CAP_MKFIFOAT.
Renamed CAP_MKNODE to CAP_MKNODEAT.
CAP_READ old behaviour:
- Allow pread(2).
- Disallow read(2), readv(2) (if there is no CAP_SEEK).
CAP_READ new behaviour:
- Allow read(2), readv(2).
- Disallow pread(2) (CAP_SEEK was also required).
CAP_WRITE old behaviour:
- Allow pwrite(2).
- Disallow write(2), writev(2) (if there is no CAP_SEEK).
CAP_WRITE new behaviour:
- Allow write(2), writev(2).
- Disallow pwrite(2) (CAP_SEEK was also required).
Added convinient defines:
#define CAP_PREAD (CAP_SEEK | CAP_READ)
#define CAP_PWRITE (CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_R (CAP_MMAP | CAP_SEEK | CAP_READ)
#define CAP_MMAP_W (CAP_MMAP | CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_X (CAP_MMAP | CAP_SEEK | 0x0000000000000008ULL)
#define CAP_MMAP_RW (CAP_MMAP_R | CAP_MMAP_W)
#define CAP_MMAP_RX (CAP_MMAP_R | CAP_MMAP_X)
#define CAP_MMAP_WX (CAP_MMAP_W | CAP_MMAP_X)
#define CAP_MMAP_RWX (CAP_MMAP_R | CAP_MMAP_W | CAP_MMAP_X)
#define CAP_RECV CAP_READ
#define CAP_SEND CAP_WRITE
#define CAP_SOCK_CLIENT \
(CAP_CONNECT | CAP_GETPEERNAME | CAP_GETSOCKNAME | CAP_GETSOCKOPT | \
CAP_PEELOFF | CAP_RECV | CAP_SEND | CAP_SETSOCKOPT | CAP_SHUTDOWN)
#define CAP_SOCK_SERVER \
(CAP_ACCEPT | CAP_BIND | CAP_GETPEERNAME | CAP_GETSOCKNAME | \
CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \
CAP_SETSOCKOPT | CAP_SHUTDOWN)
Added defines for backward API compatibility:
#define CAP_MAPEXEC CAP_MMAP_X
#define CAP_DELETE CAP_UNLINKAT
#define CAP_MKDIR CAP_MKDIRAT
#define CAP_RMDIR CAP_UNLINKAT
#define CAP_MKFIFO CAP_MKFIFOAT
#define CAP_MKNOD CAP_MKNODAT
#define CAP_SOCK_ALL (CAP_SOCK_CLIENT | CAP_SOCK_SERVER)
Sponsored by: The FreeBSD Foundation
Reviewed by: Christoph Mallon <christoph.mallon@gmx.de>
Many aspects discussed with: rwatson, benl, jonathan
ABI compatibility discussed with: kib
2013-03-02 00:53:12 +00:00
|
|
|
535 AUE_CAP_IOCTLS_GET STD { ssize_t cap_ioctls_get(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_(maxcmds) u_long *cmds, \
|
|
|
|
size_t maxcmds); }
|
Merge Capsicum overhaul:
- Capability is no longer separate descriptor type. Now every descriptor
has set of its own capability rights.
- The cap_new(2) system call is left, but it is no longer documented and
should not be used in new code.
- The new syscall cap_rights_limit(2) should be used instead of
cap_new(2), which limits capability rights of the given descriptor
without creating a new one.
- The cap_getrights(2) syscall is renamed to cap_rights_get(2).
- If CAP_IOCTL capability right is present we can further reduce allowed
ioctls list with the new cap_ioctls_limit(2) syscall. List of allowed
ioctls can be retrived with cap_ioctls_get(2) syscall.
- If CAP_FCNTL capability right is present we can further reduce fcntls
that can be used with the new cap_fcntls_limit(2) syscall and retrive
them with cap_fcntls_get(2).
- To support ioctl and fcntl white-listing the filedesc structure was
heavly modified.
- The audit subsystem, kdump and procstat tools were updated to
recognize new syscalls.
- Capability rights were revised and eventhough I tried hard to provide
backward API and ABI compatibility there are some incompatible changes
that are described in detail below:
CAP_CREATE old behaviour:
- Allow for openat(2)+O_CREAT.
- Allow for linkat(2).
- Allow for symlinkat(2).
CAP_CREATE new behaviour:
- Allow for openat(2)+O_CREAT.
Added CAP_LINKAT:
- Allow for linkat(2). ABI: Reuses CAP_RMDIR bit.
- Allow to be target for renameat(2).
Added CAP_SYMLINKAT:
- Allow for symlinkat(2).
Removed CAP_DELETE. Old behaviour:
- Allow for unlinkat(2) when removing non-directory object.
- Allow to be source for renameat(2).
Removed CAP_RMDIR. Old behaviour:
- Allow for unlinkat(2) when removing directory.
Added CAP_RENAMEAT:
- Required for source directory for the renameat(2) syscall.
Added CAP_UNLINKAT (effectively it replaces CAP_DELETE and CAP_RMDIR):
- Allow for unlinkat(2) on any object.
- Required if target of renameat(2) exists and will be removed by this
call.
Removed CAP_MAPEXEC.
CAP_MMAP old behaviour:
- Allow for mmap(2) with any combination of PROT_NONE, PROT_READ and
PROT_WRITE.
CAP_MMAP new behaviour:
- Allow for mmap(2)+PROT_NONE.
Added CAP_MMAP_R:
- Allow for mmap(PROT_READ).
Added CAP_MMAP_W:
- Allow for mmap(PROT_WRITE).
Added CAP_MMAP_X:
- Allow for mmap(PROT_EXEC).
Added CAP_MMAP_RW:
- Allow for mmap(PROT_READ | PROT_WRITE).
Added CAP_MMAP_RX:
- Allow for mmap(PROT_READ | PROT_EXEC).
Added CAP_MMAP_WX:
- Allow for mmap(PROT_WRITE | PROT_EXEC).
Added CAP_MMAP_RWX:
- Allow for mmap(PROT_READ | PROT_WRITE | PROT_EXEC).
Renamed CAP_MKDIR to CAP_MKDIRAT.
Renamed CAP_MKFIFO to CAP_MKFIFOAT.
Renamed CAP_MKNODE to CAP_MKNODEAT.
CAP_READ old behaviour:
- Allow pread(2).
- Disallow read(2), readv(2) (if there is no CAP_SEEK).
CAP_READ new behaviour:
- Allow read(2), readv(2).
- Disallow pread(2) (CAP_SEEK was also required).
CAP_WRITE old behaviour:
- Allow pwrite(2).
- Disallow write(2), writev(2) (if there is no CAP_SEEK).
CAP_WRITE new behaviour:
- Allow write(2), writev(2).
- Disallow pwrite(2) (CAP_SEEK was also required).
Added convinient defines:
#define CAP_PREAD (CAP_SEEK | CAP_READ)
#define CAP_PWRITE (CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_R (CAP_MMAP | CAP_SEEK | CAP_READ)
#define CAP_MMAP_W (CAP_MMAP | CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_X (CAP_MMAP | CAP_SEEK | 0x0000000000000008ULL)
#define CAP_MMAP_RW (CAP_MMAP_R | CAP_MMAP_W)
#define CAP_MMAP_RX (CAP_MMAP_R | CAP_MMAP_X)
#define CAP_MMAP_WX (CAP_MMAP_W | CAP_MMAP_X)
#define CAP_MMAP_RWX (CAP_MMAP_R | CAP_MMAP_W | CAP_MMAP_X)
#define CAP_RECV CAP_READ
#define CAP_SEND CAP_WRITE
#define CAP_SOCK_CLIENT \
(CAP_CONNECT | CAP_GETPEERNAME | CAP_GETSOCKNAME | CAP_GETSOCKOPT | \
CAP_PEELOFF | CAP_RECV | CAP_SEND | CAP_SETSOCKOPT | CAP_SHUTDOWN)
#define CAP_SOCK_SERVER \
(CAP_ACCEPT | CAP_BIND | CAP_GETPEERNAME | CAP_GETSOCKNAME | \
CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \
CAP_SETSOCKOPT | CAP_SHUTDOWN)
Added defines for backward API compatibility:
#define CAP_MAPEXEC CAP_MMAP_X
#define CAP_DELETE CAP_UNLINKAT
#define CAP_MKDIR CAP_MKDIRAT
#define CAP_RMDIR CAP_UNLINKAT
#define CAP_MKFIFO CAP_MKFIFOAT
#define CAP_MKNOD CAP_MKNODAT
#define CAP_SOCK_ALL (CAP_SOCK_CLIENT | CAP_SOCK_SERVER)
Sponsored by: The FreeBSD Foundation
Reviewed by: Christoph Mallon <christoph.mallon@gmx.de>
Many aspects discussed with: rwatson, benl, jonathan
ABI compatibility discussed with: kib
2013-03-02 00:53:12 +00:00
|
|
|
536 AUE_CAP_FCNTLS_LIMIT STD { int cap_fcntls_limit(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
uint32_t fcntlrights); }
|
Merge Capsicum overhaul:
- Capability is no longer separate descriptor type. Now every descriptor
has set of its own capability rights.
- The cap_new(2) system call is left, but it is no longer documented and
should not be used in new code.
- The new syscall cap_rights_limit(2) should be used instead of
cap_new(2), which limits capability rights of the given descriptor
without creating a new one.
- The cap_getrights(2) syscall is renamed to cap_rights_get(2).
- If CAP_IOCTL capability right is present we can further reduce allowed
ioctls list with the new cap_ioctls_limit(2) syscall. List of allowed
ioctls can be retrived with cap_ioctls_get(2) syscall.
- If CAP_FCNTL capability right is present we can further reduce fcntls
that can be used with the new cap_fcntls_limit(2) syscall and retrive
them with cap_fcntls_get(2).
- To support ioctl and fcntl white-listing the filedesc structure was
heavly modified.
- The audit subsystem, kdump and procstat tools were updated to
recognize new syscalls.
- Capability rights were revised and eventhough I tried hard to provide
backward API and ABI compatibility there are some incompatible changes
that are described in detail below:
CAP_CREATE old behaviour:
- Allow for openat(2)+O_CREAT.
- Allow for linkat(2).
- Allow for symlinkat(2).
CAP_CREATE new behaviour:
- Allow for openat(2)+O_CREAT.
Added CAP_LINKAT:
- Allow for linkat(2). ABI: Reuses CAP_RMDIR bit.
- Allow to be target for renameat(2).
Added CAP_SYMLINKAT:
- Allow for symlinkat(2).
Removed CAP_DELETE. Old behaviour:
- Allow for unlinkat(2) when removing non-directory object.
- Allow to be source for renameat(2).
Removed CAP_RMDIR. Old behaviour:
- Allow for unlinkat(2) when removing directory.
Added CAP_RENAMEAT:
- Required for source directory for the renameat(2) syscall.
Added CAP_UNLINKAT (effectively it replaces CAP_DELETE and CAP_RMDIR):
- Allow for unlinkat(2) on any object.
- Required if target of renameat(2) exists and will be removed by this
call.
Removed CAP_MAPEXEC.
CAP_MMAP old behaviour:
- Allow for mmap(2) with any combination of PROT_NONE, PROT_READ and
PROT_WRITE.
CAP_MMAP new behaviour:
- Allow for mmap(2)+PROT_NONE.
Added CAP_MMAP_R:
- Allow for mmap(PROT_READ).
Added CAP_MMAP_W:
- Allow for mmap(PROT_WRITE).
Added CAP_MMAP_X:
- Allow for mmap(PROT_EXEC).
Added CAP_MMAP_RW:
- Allow for mmap(PROT_READ | PROT_WRITE).
Added CAP_MMAP_RX:
- Allow for mmap(PROT_READ | PROT_EXEC).
Added CAP_MMAP_WX:
- Allow for mmap(PROT_WRITE | PROT_EXEC).
Added CAP_MMAP_RWX:
- Allow for mmap(PROT_READ | PROT_WRITE | PROT_EXEC).
Renamed CAP_MKDIR to CAP_MKDIRAT.
Renamed CAP_MKFIFO to CAP_MKFIFOAT.
Renamed CAP_MKNODE to CAP_MKNODEAT.
CAP_READ old behaviour:
- Allow pread(2).
- Disallow read(2), readv(2) (if there is no CAP_SEEK).
CAP_READ new behaviour:
- Allow read(2), readv(2).
- Disallow pread(2) (CAP_SEEK was also required).
CAP_WRITE old behaviour:
- Allow pwrite(2).
- Disallow write(2), writev(2) (if there is no CAP_SEEK).
CAP_WRITE new behaviour:
- Allow write(2), writev(2).
- Disallow pwrite(2) (CAP_SEEK was also required).
Added convinient defines:
#define CAP_PREAD (CAP_SEEK | CAP_READ)
#define CAP_PWRITE (CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_R (CAP_MMAP | CAP_SEEK | CAP_READ)
#define CAP_MMAP_W (CAP_MMAP | CAP_SEEK | CAP_WRITE)
#define CAP_MMAP_X (CAP_MMAP | CAP_SEEK | 0x0000000000000008ULL)
#define CAP_MMAP_RW (CAP_MMAP_R | CAP_MMAP_W)
#define CAP_MMAP_RX (CAP_MMAP_R | CAP_MMAP_X)
#define CAP_MMAP_WX (CAP_MMAP_W | CAP_MMAP_X)
#define CAP_MMAP_RWX (CAP_MMAP_R | CAP_MMAP_W | CAP_MMAP_X)
#define CAP_RECV CAP_READ
#define CAP_SEND CAP_WRITE
#define CAP_SOCK_CLIENT \
(CAP_CONNECT | CAP_GETPEERNAME | CAP_GETSOCKNAME | CAP_GETSOCKOPT | \
CAP_PEELOFF | CAP_RECV | CAP_SEND | CAP_SETSOCKOPT | CAP_SHUTDOWN)
#define CAP_SOCK_SERVER \
(CAP_ACCEPT | CAP_BIND | CAP_GETPEERNAME | CAP_GETSOCKNAME | \
CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \
CAP_SETSOCKOPT | CAP_SHUTDOWN)
Added defines for backward API compatibility:
#define CAP_MAPEXEC CAP_MMAP_X
#define CAP_DELETE CAP_UNLINKAT
#define CAP_MKDIR CAP_MKDIRAT
#define CAP_RMDIR CAP_UNLINKAT
#define CAP_MKFIFO CAP_MKFIFOAT
#define CAP_MKNOD CAP_MKNODAT
#define CAP_SOCK_ALL (CAP_SOCK_CLIENT | CAP_SOCK_SERVER)
Sponsored by: The FreeBSD Foundation
Reviewed by: Christoph Mallon <christoph.mallon@gmx.de>
Many aspects discussed with: rwatson, benl, jonathan
ABI compatibility discussed with: kib
2013-03-02 00:53:12 +00:00
|
|
|
537 AUE_CAP_FCNTLS_GET STD { int cap_fcntls_get(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_ uint32_t *fcntlrightsp); }
|
|
|
|
538 AUE_BINDAT STD { int bindat(int fd, int s, \
|
|
|
|
_In_reads_bytes_(namelen) \
|
|
|
|
caddr_t name, \
|
2013-03-02 21:11:30 +00:00
|
|
|
int namelen); }
|
2018-04-05 20:31:45 +00:00
|
|
|
539 AUE_CONNECTAT STD { int connectat(int fd, int s, \
|
|
|
|
_In_reads_bytes_(namelen) \
|
|
|
|
caddr_t name, \
|
2013-03-02 21:11:30 +00:00
|
|
|
int namelen); }
|
2018-04-05 20:31:45 +00:00
|
|
|
540 AUE_CHFLAGSAT STD { int chflagsat(int fd, \
|
|
|
|
_In_z_ const char *path, \
|
2013-03-21 22:59:01 +00:00
|
|
|
u_long flags, int atflag); }
|
2013-05-01 20:10:21 +00:00
|
|
|
541 AUE_ACCEPT STD { int accept4(int s, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Out_writes_bytes_opt_(*anamelen) \
|
2018-10-22 21:50:43 +00:00
|
|
|
struct sockaddr *name, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_Inout_opt_ \
|
2018-10-22 21:50:43 +00:00
|
|
|
__socklen_t *anamelen, \
|
2013-05-01 20:10:21 +00:00
|
|
|
int flags); }
|
2018-04-05 20:31:45 +00:00
|
|
|
542 AUE_PIPE STD { int pipe2(_Out_writes_(2) int *fildes, \
|
|
|
|
int flags); }
|
|
|
|
543 AUE_AIO_MLOCK STD { int aio_mlock(_In_ struct aiocb *aiocbp); }
|
2017-03-29 22:33:56 +00:00
|
|
|
544 AUE_PROCCTL STD { int procctl(idtype_t idtype, id_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
int com, _In_opt_ void *data); }
|
|
|
|
545 AUE_POLL STD { int ppoll( \
|
|
|
|
_Inout_updates_(nfds) struct pollfd *fds, \
|
|
|
|
u_int nfds, \
|
|
|
|
_In_opt_ const struct timespec *ts, \
|
|
|
|
_In_opt_ const sigset_t *set); }
|
2015-01-23 21:07:08 +00:00
|
|
|
546 AUE_FUTIMES STD { int futimens(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_(2) \
|
2015-01-23 21:07:08 +00:00
|
|
|
struct timespec *times); }
|
|
|
|
547 AUE_FUTIMESAT STD { int utimensat(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_z_ char *path, \
|
|
|
|
_In_reads_(2) \
|
|
|
|
struct timespec *times, \
|
|
|
|
int flag); }
|
2018-09-28 17:23:54 +00:00
|
|
|
548 AUE_NULL OBSOL numa_getaffinity
|
|
|
|
549 AUE_NULL OBSOL numa_setaffinity
|
2016-08-15 19:08:51 +00:00
|
|
|
550 AUE_FSYNC STD { int fdatasync(int fd); }
|
2018-04-05 20:31:45 +00:00
|
|
|
551 AUE_FSTAT STD { int fstat(int fd, _Out_ struct stat *sb); }
|
|
|
|
552 AUE_FSTATAT STD { int fstatat(int fd, _In_z_ char *path, \
|
|
|
|
_Out_ struct stat *buf, int flag); }
|
|
|
|
553 AUE_FHSTAT STD { int fhstat(_In_ const struct fhandle *u_fhp, \
|
|
|
|
_Out_ struct stat *sb); }
|
|
|
|
554 AUE_GETDIRENTRIES STD { ssize_t getdirentries(int fd, \
|
|
|
|
_Out_writes_bytes_(count) char *buf, \
|
|
|
|
size_t count, _Out_ off_t *basep); }
|
|
|
|
555 AUE_STATFS STD { int statfs(_In_z_ char *path, \
|
|
|
|
_Out_ struct statfs *buf); }
|
|
|
|
556 AUE_FSTATFS STD { int fstatfs(int fd, \
|
|
|
|
_Out_ struct statfs *buf); }
|
|
|
|
557 AUE_GETFSSTAT STD { int getfsstat( \
|
|
|
|
_Out_writes_bytes_opt_(bufsize) \
|
|
|
|
struct statfs *buf, \
|
|
|
|
long bufsize, int mode); }
|
|
|
|
558 AUE_FHSTATFS STD { int fhstatfs( \
|
|
|
|
_In_ const struct fhandle *u_fhp, \
|
|
|
|
_Out_ struct statfs *buf); }
|
|
|
|
559 AUE_MKNODAT STD { int mknodat(int fd, _In_z_ char *path, \
|
|
|
|
mode_t mode, dev_t dev); }
|
Add abstime kqueue(2) timers and expand struct kevent members.
This change implements NOTE_ABSTIME flag for EVFILT_TIMER, which
specifies that the data field contains absolute time to fire the
event.
To make this useful, data member of the struct kevent must be extended
to 64bit. Using the opportunity, I also added ext members. This
changes struct kevent almost to Apple struct kevent64, except I did
not changed type of ident and udata, the later would cause serious API
incompatibilities.
The type of ident was kept uintptr_t since EVFILT_AIO returns a
pointer in this field, and e.g. CHERI is sensitive to the type
(discussed with brooks, jhb).
Unlike Apple kevent64, symbol versioning allows us to claim ABI
compatibility and still name the new syscall kevent(2). Compat shims
are provided for both host native and compat32.
Requested by: bapt
Reviewed by: bapt, brooks, ngie (previous version)
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D11025
2017-06-17 00:57:26 +00:00
|
|
|
560 AUE_KEVENT STD { int kevent(int fd, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_reads_opt_(nchanges) \
|
|
|
|
struct kevent *changelist, \
|
|
|
|
int nchanges, \
|
|
|
|
_Out_writes_opt_(nevents) \
|
Add abstime kqueue(2) timers and expand struct kevent members.
This change implements NOTE_ABSTIME flag for EVFILT_TIMER, which
specifies that the data field contains absolute time to fire the
event.
To make this useful, data member of the struct kevent must be extended
to 64bit. Using the opportunity, I also added ext members. This
changes struct kevent almost to Apple struct kevent64, except I did
not changed type of ident and udata, the later would cause serious API
incompatibilities.
The type of ident was kept uintptr_t since EVFILT_AIO returns a
pointer in this field, and e.g. CHERI is sensitive to the type
(discussed with brooks, jhb).
Unlike Apple kevent64, symbol versioning allows us to claim ABI
compatibility and still name the new syscall kevent(2). Compat shims
are provided for both host native and compat32.
Requested by: bapt
Reviewed by: bapt, brooks, ngie (previous version)
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D11025
2017-06-17 00:57:26 +00:00
|
|
|
struct kevent *eventlist, int nevents, \
|
2018-04-05 20:31:45 +00:00
|
|
|
_In_opt_ const struct timespec *timeout); }
|
2018-01-12 22:48:23 +00:00
|
|
|
561 AUE_NULL STD { int cpuset_getdomain(cpulevel_t level, \
|
|
|
|
cpuwhich_t which, id_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
size_t domainsetsize, \
|
|
|
|
_Out_writes_bytes_(domainsetsize) \
|
|
|
|
domainset_t *mask, \
|
|
|
|
_Out_ int *policy); }
|
2018-01-12 22:48:23 +00:00
|
|
|
562 AUE_NULL STD { int cpuset_setdomain(cpulevel_t level, \
|
|
|
|
cpuwhich_t which, id_t id, \
|
2018-04-05 20:31:45 +00:00
|
|
|
size_t domainsetsize, \
|
|
|
|
_In_ domainset_t *mask, \
|
2018-01-12 22:48:23 +00:00
|
|
|
int policy); }
|
2018-04-05 20:31:45 +00:00
|
|
|
563 AUE_NULL STD { int getrandom( \
|
|
|
|
_Out_writes_bytes_(buflen) void *buf, \
|
|
|
|
size_t buflen, unsigned int flags); }
|
2015-07-11 15:22:11 +00:00
|
|
|
|
2002-10-15 01:36:45 +00:00
|
|
|
; Please copy any additions and changes to the following compatability tables:
|
2003-12-10 22:08:37 +00:00
|
|
|
; sys/compat/freebsd32/syscalls.master
|
2017-11-28 18:23:17 +00:00
|
|
|
; vim: syntax=off
|