X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/39236c6e673c41db228275375ab7fdb0f837b292..5ba3f43ea354af8ad55bea84372a2bc834d8757c:/bsd/sys/fcntl.h diff --git a/bsd/sys/fcntl.h b/bsd/sys/fcntl.h index 22d4eb8ea..02c868bba 100644 --- a/bsd/sys/fcntl.h +++ b/bsd/sys/fcntl.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2007 Apple Inc. All rights reserved. + * Copyright (c) 2000-2013 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -132,6 +132,22 @@ #define FDEFER 0x2000 /* defer for next gc pass */ #define FHASLOCK 0x4000 /* descriptor holds advisory lock */ #endif + +#if __DARWIN_C_LEVEL >= 200809L +/* + * Descriptor value for the current working directory + */ +#define AT_FDCWD -2 + +/* + * Flags for the at functions + */ +#define AT_EACCESS 0x0010 /* Use effective ids in access check */ +#define AT_SYMLINK_NOFOLLOW 0x0020 /* Act on the symlink itself not the target */ +#define AT_SYMLINK_FOLLOW 0x0040 /* Act on target of symlink */ +#define AT_REMOVEDIR 0x0080 /* Path refers to directory */ +#endif + #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) #define O_EVTONLY 0x8000 /* descriptor requested for event notifications only */ #endif @@ -174,9 +190,14 @@ #define O_CLOFORK 0x8000000 /* implicitly set FD_CLOFORK */ #endif +#ifdef KERNEL +#define FUNENCRYPTED 0x10000000 +#endif + /* Data Protection Flags */ #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) #define O_DP_GETRAWENCRYPTED 0x0001 +#define O_DP_GETRAWUNENCRYPTED 0x0002 #endif @@ -211,8 +232,8 @@ */ #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) -#define CPF_OVERWRITE 1 -#define CPF_IGNORE_MODE 2 +#define CPF_OVERWRITE 0x0001 +#define CPF_IGNORE_MODE 0x0002 #define CPF_MASK (CPF_OVERWRITE|CPF_IGNORE_MODE) #endif @@ -291,7 +312,7 @@ #define F_SETBACKINGSTORE 70 /* Mark the file as being the backing store for another filesystem */ #define F_GETPATH_MTMINFO 71 /* return the full path of the FD, but error in specific mtmd circumstances */ -/* 72 is free. It used to be F_GETENCRYPTEDDATA, which is now removed. */ +#define F_GETCODEDIR 72 /* Returns the code directory, with associated hashes, to the caller */ #define F_SETNOSIGPIPE 73 /* No SIGPIPE generated on EPIPE */ #define F_GETNOSIGPIPE 74 /* Status of SIGPIPE for this fd */ @@ -313,8 +334,39 @@ * written should be written in greedy mode for additional speed at * the cost of storage efficiency. A nonzero value enables it, 0 disables it. */ + +#define F_SETIOTYPE 82 /* + * Use parameters to describe content being written to the FD. See + * flag definitions below for argument bits. + */ +#endif + +#define F_ADDFILESIGS_FOR_DYLD_SIM 83 /* Add signature from same file, only if it is signed by Apple (used by dyld for simulator) */ + +#ifdef PRIVATE +#define F_RECYCLE 84 /* Recycle vnode; debug/development builds only */ #endif +#define F_BARRIERFSYNC 85 /* fsync + issue barrier to drive */ + +#ifdef PRIVATE +#define F_OFD_SETLK 90 /* Acquire or release open file description lock */ +#define F_OFD_SETLKW 91 /* (as F_OFD_SETLK but blocking if conflicting lock) */ +#define F_OFD_GETLK 92 /* Examine OFD lock */ + +#define F_OFD_SETLKWTIMEOUT 93 /* (as F_OFD_SETLKW but return if timeout) */ +#define F_OFD_GETLKPID 94 /* get record locking information */ + +#define F_SETCONFINED 95 /* "confine" OFD to process */ +#define F_GETCONFINED 96 /* is-fd-confined? */ +#endif + +#define F_ADDFILESIGS_RETURN 97 /* Add signature from same file, return end offset in structure on success */ +#define F_CHECK_LV 98 /* Check if Library Validation allows this Mach-O file to be mapped into the calling process */ + +#define F_PUNCHHOLE 99 /* Deallocate a range of the file */ + +#define F_TRIM_ACTIVE_FILE 100 /* Trim an active file */ // FS-specific fcntl()'s numbers begin at 0x00010000 and go up #define FCNTL_FS_SPECIFIC_BASE 0x00010000 @@ -342,6 +394,15 @@ #define F_PROV 0x080 /* Non-coalesced provisional lock */ #define F_WAKE1_SAFE 0x100 /* its safe to only wake one waiter */ #define F_ABORT 0x200 /* lock attempt aborted (force umount) */ +#define F_OFD_LOCK 0x400 /* Use "OFD" semantics for lock */ +#endif + +#if PRIVATE +/* + * ISOCHRONOUS attempts to sustain a minimum platform-dependent throughput + * for the duration of the I/O delivered to the driver. + */ +#define F_IOTYPE_ISOCHRONOUS 0x0001 #endif /* @@ -413,6 +474,51 @@ struct radvisory { #pragma pack() #endif /* KERNEL */ +#ifndef KERNEL +/** Information the user passes in to get the codeblobs out of the kernel */ +typedef struct fcodeblobs { + void *f_cd_hash; + size_t f_hash_size; + void *f_cd_buffer; + size_t f_cd_size; + unsigned int *f_out_size; + int f_arch; + int __padding; +} fcodeblobs_t; +#endif /* KERNEL */ + +#ifdef KERNEL +typedef struct user32_fcodeblobs { + user32_addr_t f_cd_hash; + user32_size_t f_hash_size; + user32_addr_t f_cd_buffer; + user32_size_t f_cd_size; + user32_addr_t f_out_size; + int f_arch; +} user32_fcodeblobs_t; + +/* LP64 version of fcodeblobs */ +typedef struct user64_fcodeblobs { + user64_addr_t f_cd_hash; + user64_size_t f_hash_size; + user64_addr_t f_cd_buffer; + user64_size_t f_cd_size; + user64_addr_t f_out_size; + int f_arch; + int __padding; +} user64_fcodeblobs_t; + +/* kernel version of fcodeblobs */ +typedef struct user_fcodeblobs { + user_addr_t f_cd_hash; + user_size_t f_hash_size; + user_addr_t f_cd_buffer; + user_size_t f_cd_size; + user_addr_t f_out_size; + int f_arch; +} user_fcodeblobs_t; +#endif /* KERNEL */ + /* * detached code signatures data type - * information passed by user to system used by F_ADDSIGS and F_ADDFILESIGS. @@ -425,7 +531,7 @@ typedef struct fsignatures { size_t fs_blob_size; } fsignatures_t; #ifdef KERNEL -/* LP64 version of fsignatures. all pointers +/* LP64 version of fsignatures. all pointers * grow when we're dealing with a 64-bit process. * WARNING - keep in sync with fsignatures */ @@ -445,13 +551,50 @@ typedef struct user_fsignatures { } user_fsignatures_t; #endif /* KERNEL */ +/* + * DYLD needs to check if the object is allowed to be combined + * into the main binary. This is done between the code signature + * is loaded and dyld is doing all the work to process the LOAD commands. + * + * While this could be done in F_ADDFILESIGS.* family the hook into + * the MAC module doesn't say no when LV isn't enabled and then that + * is cached on the vnode, and the MAC module never gets change once + * a process that library validation enabled. + */ +typedef struct fchecklv { + off_t lv_file_start; + size_t lv_error_message_size; + void *lv_error_message; +} fchecklv_t; + +#ifdef KERNEL +/* LP64 version of fchecklv. all pointers + * grow when we're dealing with a 64-bit process. + * WARNING - keep in sync with fsignatures + */ + +typedef struct user32_fchecklv { + user32_off_t lv_file_start; + user32_size_t lv_error_message_size; + user32_addr_t lv_error_message; +} user32_fchecklv_t; + +typedef struct user_fchecklv { + off_t lv_file_start; + user_size_t lv_error_message_size; + user_addr_t lv_error_message; +} user_fchecklv_t; + +#endif /* KERNEL */ + + /* lock operations for flock(2) */ #define LOCK_SH 0x01 /* shared file lock */ #define LOCK_EX 0x02 /* exclusive file lock */ #define LOCK_NB 0x04 /* don't block when locking */ #define LOCK_UN 0x08 /* unlock file */ -/* fstore_t type used by F_DEALLOCATE and F_PREALLOCATE commands */ +/* fstore_t type used by F_PREALLOCATE command */ typedef struct fstore { unsigned int fst_flags; /* IN: flags word */ @@ -461,6 +604,20 @@ typedef struct fstore { off_t fst_bytesalloc; /* OUT: number of bytes allocated */ } fstore_t; +/* fpunchhole_t used by F_PUNCHHOLE */ +typedef struct fpunchhole { + unsigned int fp_flags; /* unused */ + unsigned int reserved; /* (to maintain 8-byte alignment) */ + off_t fp_offset; /* IN: start of the region */ + off_t fp_length; /* IN: size of the region */ +} fpunchhole_t; + +/* factive_file_trim_t used by F_TRIM_ACTIVE_FILE */ +typedef struct ftrimactivefile { + off_t fta_offset; /* IN: start of the region */ + off_t fta_length; /* IN: size of the region */ +} ftrimactivefile_t; + /* fbootstraptransfer_t used by F_READBOOTSTRAP and F_WRITEBOOTSTRAP commands */ typedef struct fbootstraptransfer { @@ -470,7 +627,7 @@ typedef struct fbootstraptransfer { } fbootstraptransfer_t; #ifdef KERNEL -/* LP64 version of fbootstraptransfer. all pointers +/* LP64 version of fbootstraptransfer. all pointers * grow when we're dealing with a 64-bit process. * WARNING - keep in sync with fbootstraptransfer */ @@ -586,6 +743,9 @@ typedef enum { __BEGIN_DECLS int open(const char *, int, ...) __DARWIN_ALIAS_C(open); +#if __DARWIN_C_LEVEL >= 200809L +int openat(int, const char *, int, ...) __DARWIN_NOCANCEL(openat) __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); +#endif int creat(const char *, mode_t) __DARWIN_ALIAS_C(creat); int fcntl(int, int, ...) __DARWIN_ALIAS_C(fcntl); #if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE) @@ -608,7 +768,10 @@ int fileport_makeport(int, fileport_t*); int fileport_makefd(fileport_t); #endif /* PRIVATE */ int openx_np(const char *, int, filesec_t); -/* data-protected non-portable open(2) */ +/* + * data-protected non-portable open(2) : + int open_dprotected_np(user_addr_t path, int flags, int class, int dpflags, int mode) + */ int open_dprotected_np ( const char *, int, int, int, ...); int flock(int, int); filesec_t filesec_init(void);