X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/316670eb35587141e969394ae8537d66b9211e80..f427ee49d309d8fc33ebf3042c3a775f2f530ded:/osfmk/mach/mach_port.defs diff --git a/osfmk/mach/mach_port.defs b/osfmk/mach/mach_port.defs index 2799790b6..969fad546 100644 --- a/osfmk/mach/mach_port.defs +++ b/osfmk/mach/mach_port.defs @@ -76,6 +76,8 @@ subsystem #include #include +type kobject_description_t = c_string[*:512]; + /* * Returns the set of port and port set names * to which the target task has access, along with @@ -208,7 +210,30 @@ routine mach_port_mod_refs( right : mach_port_right_t; delta : mach_port_delta_t); -skip; +/* + * Peek at the message queue for the specified receive + * right and return info about the message with the + * sequence number matching the input. If zero is + * specified as the seqno, the first message in the + * queue will be peeked. + * + * Only the following trailer types are currently supported: + * MACH_RCV_TRAILER_TYPE(MACH_MSG_TRAILER_FORMAT_0) + * + * or'ed with one of these element types: + * MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_NULL) + * MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_SEQNO) + * MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_SENDER) + * MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT) + */ +routine mach_port_peek( + task : ipc_space_t; + name : mach_port_name_t; + trailer_type : mach_msg_trailer_type_t; + inout request_seqnop : mach_port_seqno_t; + out msg_sizep : mach_msg_size_t; + out msg_idp : mach_msg_id_t; + out trailer_infop : mach_msg_trailer_info_t, CountInOut); /* * Only valid for receive rights. @@ -223,9 +248,14 @@ routine mach_port_set_mscount( * Only valid for port sets. Returns a list of * the members. */ - -routine mach_port_get_set_status( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_get_set_status_from_user( + port : mach_port_t; +#else +mach_port_get_set_status( + task : ipc_space_read_t; +#endif name : mach_port_name_t; out members : mach_port_name_array_t); @@ -329,9 +359,14 @@ routine mach_port_set_seqno( /* * Returns information about a port. */ - -routine mach_port_get_attributes( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_get_attributes_from_user( + port : mach_port_t; +#else +mach_port_get_attributes( + task : ipc_space_read_t; +#endif name : mach_port_name_t; flavor : mach_port_flavor_t; out port_info_out : mach_port_info_t, CountInOut); @@ -401,8 +436,14 @@ routine mach_port_get_srights( * This call is only valid on MACH_IPC_DEBUG kernels. * Otherwise, KERN_FAILURE is returned. */ -routine mach_port_space_info( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_space_info_from_user( + port : mach_port_t; +#else +mach_port_space_info( + space : ipc_space_read_t; +#endif out space_info : ipc_info_space_t; out table_info : ipc_info_name_array_t; out tree_info : ipc_info_tree_name_array_t); @@ -428,8 +469,14 @@ routine mach_port_dnrequest_info( * This interface is DEPRECATED in favor of the new * mach_port_kernel_object64() call (see below). */ -routine mach_port_kernel_object( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_kernel_object_from_user( + port : mach_port_t; +#else +mach_port_kernel_object( + task : ipc_space_read_t; +#endif name : mach_port_name_t; out object_type : unsigned; out object_addr : unsigned); @@ -478,9 +525,14 @@ routine mach_port_extract_member( * Only valid for receive rights. * Gets the context pointer for the port. */ - -routine mach_port_get_context( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_get_context_from_user( + port : mach_port_t; +#else +mach_port_get_context( + task : ipc_space_read_t; +#endif name : mach_port_name_t; #ifdef LIBSYSCALL_INTERFACE out context : mach_port_context_t @@ -510,11 +562,154 @@ routine mach_port_set_context( * This call is only valid on MACH_IPC_DEBUG kernels. * Otherwise, KERN_FAILURE is returned. */ -routine mach_port_kobject( - task : ipc_space_t; +routine +#ifdef KERNEL_SERVER +mach_port_kobject_from_user( + port : mach_port_t; +#else +mach_port_kobject( + task : ipc_space_read_t; +#endif name : mach_port_name_t; out object_type : natural_t; out object_addr : mach_vm_address_t); +/* + * Constructs a right based on the options passed + * in. Also allows guarding the port as one of the + * options if the requested right is a receive + * right. + */ +routine mach_port_construct( + task : ipc_space_t; + options : mach_port_options_ptr_t; +#ifdef LIBSYSCALL_INTERFACE + context : mach_port_context_t; +#else + context : uint64_t; +#endif + out name : mach_port_name_t); + +/* + * Destroys a mach port using the guard provided + * for guarded ports. Also reduces the user ref + * count for send rights as specified by srdelta. + */ +routine mach_port_destruct( + task : ipc_space_t; + name : mach_port_name_t; + srdelta : mach_port_delta_t; +#ifdef LIBSYSCALL_INTERFACE + guard : mach_port_context_t +#else + guard : uint64_t +#endif + ); + +/* + * Guard an already existing port. Allows guarding + * receive rights only. Uses the context field in the + * port structure to store the guard. + */ +routine mach_port_guard( + task : ipc_space_t; + name : mach_port_name_t; +#ifdef LIBSYSCALL_INTERFACE + guard : mach_port_context_t; +#else + guard : uint64_t; +#endif + strict : boolean_t); + +/* + * Unguard a port guarded previously. For unguarded ports + * or incorrect guards passed in it raises an exception + * indicating guarding misbehavior. + */ +routine mach_port_unguard( + task : ipc_space_t; + name : mach_port_name_t; +#ifdef LIBSYSCALL_INTERFACE + guard : mach_port_context_t +#else + guard : uint64_t +#endif + ); + +/* + * Returns basic information about an IPC space. + * This call is only valid on MACH_IPC_DEBUG kernels. + * Otherwise, KERN_FAILURE is returned. + */ +routine mach_port_space_basic_info( + task : ipc_space_inspect_t; + out basic_info : ipc_info_space_basic_t); + +#if KERNEL || !LIBSYSCALL_INTERFACE +/* + * Returns sync ipc turnstile link status + * for special reply ports. + */ +routine mach_port_special_reply_port_reset_link( + task : ipc_space_t; + name : mach_port_name_t; + out srp_lost_link : boolean_t); +#else +skip; +#endif + +/* + * Guard an already existing port. Allows guarding + * receive rights only. Uses the context field in the + * port structure to store the guard. + */ +routine mach_port_guard_with_flags( + task : ipc_space_t; + name : mach_port_name_t; +#ifdef LIBSYSCALL_INTERFACE + guard : mach_port_context_t; +#else + guard : uint64_t; +#endif + flags : uint64_t); + +/* + * Swap guard value of an existing guarded port. Works + * only if it is not a strict guard. + */ +routine mach_port_swap_guard( + task : ipc_space_t; + name : mach_port_name_t; +#ifdef LIBSYSCALL_INTERFACE + old_guard : mach_port_context_t; +#else + old_guard : uint64_t; +#endif + +#ifdef LIBSYSCALL_INTERFACE + new_guard : mach_port_context_t); +#else + new_guard : uint64_t); +#endif + +/* + * Return the type and address of the kernel object + * that the given send/receive right represents. + * This call is only valid on MACH_IPC_DEBUG kernels. + * Otherwise, KERN_FAILURE is returned. + */ +routine +#ifdef KERNEL_SERVER +mach_port_kobject_description_from_user( + port : mach_port_t; +#else +mach_port_kobject_description( + task : ipc_space_read_t; +#endif + name : mach_port_name_t; + out object_type : natural_t; + out object_addr : mach_vm_address_t; + out description : kobject_description_t); + /* vim: set ft=c : */