X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/6601e61aa18bf4f09af135ff61fc7f4771d23b06..HEAD:/bsd/sys/imgact.h diff --git a/bsd/sys/imgact.h b/bsd/sys/imgact.h index 7a6920171..30cabc1f9 100644 --- a/bsd/sys/imgact.h +++ b/bsd/sys/imgact.h @@ -1,23 +1,29 @@ /* - * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2004-2005, 2011 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. + * + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * Copyright (c) 1993, David Greenman @@ -51,49 +57,108 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ +/* + * NOTICE: This file was modified by SPARTA, Inc. in 2005 to introduce + * support for mandatory and extensible security protections. This notice + * is included in support of clause 2.2 (b) of the Apple Public License, + * Version 2.0. + */ #ifndef _SYS_IMGACT_H_ -#define _SYS_IMGACT_H_ +#define _SYS_IMGACT_H_ -#define IMG_SHSIZE 512 /* largest shell interpreter, in bytes */ +#define IMG_SHSIZE 512 /* largest shell interpreter, in bytes */ +struct label; struct proc; struct nameidata; struct image_params { - user_addr_t ip_user_fname; /* argument */ - user_addr_t ip_user_argv; /* argument */ - user_addr_t ip_user_envv; /* argument */ - struct vnode *ip_vp; /* file */ - struct vnode_attr *ip_vattr; /* run file attributes */ - struct vnode_attr *ip_origvattr; /* invocation file attributes */ - char *ip_vdata; /* file data (up to one page) */ - int ip_flags; /* image flags */ - int ip_argc; /* argument count */ - char *ip_argv; /* argument vector beginning */ - int ip_envc; /* environment count */ - char *ip_strings; /* base address for strings */ - char *ip_strendp; /* current end pointer */ - char *ip_strendargvp; /* end of argv/start of envp */ - int ip_strspace; /* remaining space */ - user_size_t ip_arch_offset; /* subfile offset in ip_vp */ - user_size_t ip_arch_size; /* subfile length in ip_vp */ - char ip_interp_name[IMG_SHSIZE]; /* interpreter name */ - - /* Next two fields are for support of Classic... */ - char *ip_p_comm; /* optional alt p->p_comm */ - char *ip_tws_cache_name; /* task working set cache */ - struct vfs_context *ip_vfs_context; /* VFS context */ - struct nameidata *ip_ndp; /* current nameidata */ - thread_t ip_vfork_thread; /* thread created, if vfork */ + user_addr_t ip_user_fname; /* argument */ + user_addr_t ip_user_argv; /* argument */ + user_addr_t ip_user_envv; /* argument */ + int ip_seg; /* segment for arguments */ + struct vnode *ip_vp; /* file */ + struct vnode_attr *ip_vattr; /* run file attributes */ + struct vnode_attr *ip_origvattr; /* invocation file attributes */ + cpu_type_t ip_origcputype; /* cputype of invocation file */ + cpu_subtype_t ip_origcpusubtype; /* subtype of invocation file */ + char *ip_vdata; /* file data (up to one page) */ + int ip_flags; /* image flags */ + int ip_argc; /* argument count */ + int ip_envc; /* environment count */ + int ip_applec; /* apple vector count */ + + char *ip_startargv; /* argument vector beginning */ + char *ip_endargv; /* end of argv/start of envv */ + char *ip_endenvv; /* end of envv/start of applev */ + + char *ip_strings; /* base address for strings */ + char *ip_strendp; /* current end pointer */ + + char *ip_subsystem_root_path; /* filepath for the subsystem root */ + + int ip_argspace; /* remaining space of NCARGS limit (argv+envv) */ + int ip_strspace; /* remaining total string space */ + + user_size_t ip_arch_offset; /* subfile offset in ip_vp */ + user_size_t ip_arch_size; /* subfile length in ip_vp */ + char ip_interp_buffer[IMG_SHSIZE]; /* interpreter buffer space */ + int ip_interp_sugid_fd; /* fd for sugid script */ + + /* Next two fields are for support of architecture translation... */ + struct vfs_context *ip_vfs_context; /* VFS context */ + struct nameidata *ip_ndp; /* current nameidata */ + thread_t ip_new_thread; /* thread for spawn/vfork */ + + struct label *ip_execlabelp; /* label of the executable */ + struct label *ip_scriptlabelp; /* label of the script */ + struct vnode *ip_scriptvp; /* script */ + unsigned int ip_csflags; /* code signing flags */ + int ip_mac_return; /* return code from mac policy checks */ + void *ip_px_sa; + void *ip_px_sfa; + void *ip_px_spa; + void *ip_px_smpx; /* MAC-specific spawn attrs. */ + void *ip_px_persona; /* persona args */ + void *ip_px_pcred_info; /* posix cred args */ + void *ip_cs_error; /* codesigning error reason */ + char *ip_inherited_shared_region_id; /* inherited shared region id for ptr auth */ + + uint64_t ip_dyld_fsid; + uint64_t ip_dyld_fsobjid; + uint64_t ip_inherited_jop_pid; + unsigned int ip_simulator_binary; /* simulator binary flags */ + + ipc_port_t ip_sc_port; /* SUID port. */ }; /* * Image flags */ -#define IMGPF_NONE 0x00000000 /* No flags */ -#define IMGPF_INTERPRET 0x00000001 /* Interpreter invoked */ -#define IMGPF_RESERVED1 0x00000002 /* reserved */ -#define IMGPF_WAS_64BIT 0x00000004 /* exec from a 64Bit binary */ -#define IMGPF_IS_64BIT 0x00000008 /* exec to a 64Bit binary */ +#define IMGPF_NONE 0x00000000 /* No flags */ +#define IMGPF_INTERPRET 0x00000001 /* Interpreter invoked */ +#define IMGPF_RESERVED 0x00000002 +#define IMGPF_WAS_64BIT_ADDR 0x00000004 /* exec from a 64Bit address space */ +#define IMGPF_IS_64BIT_ADDR 0x00000008 /* exec to a 64Bit address space */ +#define IMGPF_SPAWN 0x00000010 /* spawn (without setexec) */ +#define IMGPF_DISABLE_ASLR 0x00000020 /* disable ASLR */ +#define IMGPF_ALLOW_DATA_EXEC 0x00000040 /* forcibly disallow data execution */ +#define IMGPF_VFORK_EXEC 0x00000080 /* vfork followed by exec */ +#define IMGPF_EXEC 0x00000100 /* exec */ +#define IMGPF_HIGH_BITS_ASLR 0x00000200 /* randomize high bits of ASLR slide */ +#define IMGPF_IS_64BIT_DATA 0x00000400 /* exec to a 64Bit register state */ +#define IMGPF_DRIVER 0x00000800 /* exec of a driver binary (no LC_MAIN) */ +#define IMGPF_RESLIDE 0x000001000 /* reslide the shared cache */ +#define IMGPF_PLUGIN_HOST_DISABLE_A_KEYS 0x000002000 /* process hosts plugins, disable ptr auth A keys */ +#define IMGPF_NOJOP 0x80000000 + + +/* + * Simulator binary flags + */ +#define IMGPF_SB_DEFAULT 0 /* Default value, did not check if it is a simulator binary */ +#define IMGPF_SB_TRUE 1 /* Binary is a simulator binary */ +#define IMGPF_SB_FALSE 2 /* Binary is not a simulator binary */ + -#endif /* !_SYS_IMGACT */ +#endif /* !_SYS_IMGACT */