kern_return_t ipc_port_alloc_name( ipc_space_t space, mach_port_name_t name, ipc_port_t *portp) { ipc_port_t port; kern_return_t kr; kr = ipc_object_alloc_name(space, IOT_PORT, MACH_PORT_TYPE_RECEIVE, 0, name, (ipc_object_t *) &port); if (kr != KERN_SUCCESS) return kr; /* port is locked */ ipc_port_init(port, space, name); #if CONFIG_MACF_MACH task_t issuer = current_task(); tasklabel_lock2 (issuer, space->is_task); mac_port_label_associate(&issuer->maclabel, &space->is_task->maclabel, &port->ip_label); tasklabel_unlock2 (issuer, space->is_task); #endif *portp = port; return KERN_SUCCESS; }
ipc_port_t ipc_port_alloc_special( ipc_space_t space) { ipc_port_t port; port = (ipc_port_t) io_alloc(IOT_PORT); if (port == IP_NULL) return IP_NULL; bzero((char *)port, sizeof(*port)); io_lock_init(&port->ip_object); port->ip_references = 1; port->ip_object.io_bits = io_makebits(TRUE, IOT_PORT, 0); ipc_port_init(port, space, 1); #if CONFIG_MACF_MACH /* Currently, ipc_port_alloc_special is used for two things: * - Reply ports for messages from the kernel * - Ports for communication with the kernel (e.g. task ports) * Since both of these would typically be labelled as kernel objects, * we will use a new entry point for this purpose, as current_task() * is often wrong (i.e. not kernel_task) or null. */ mac_port_label_init(&port->ip_label); mac_port_label_associate_kernel(&port->ip_label, space == ipc_space_reply); #endif return port; }
kern_return_t ipc_port_alloc_name( ipc_space_t space, mach_port_name_t name, ipc_port_t *portp) { ipc_port_t port; kern_return_t kr; /* XXX - is there a case where we need this?*/ return KERN_NOT_SUPPORTED; kr = ipc_object_alloc_name(space, IOT_PORT, MACH_PORT_TYPE_RECEIVE, name, (ipc_object_t *) &port); if (kr != KERN_SUCCESS) return kr; /* port is locked */ ipc_port_init(port, space, name); *portp = port; return KERN_SUCCESS; }
kern_return_t ipc_port_alloc( ipc_space_t space, mach_port_name_t *namep, ipc_port_t *portp) { ipc_port_t port; mach_port_name_t name; kern_return_t kr; kr = ipc_object_alloc(space, IOT_PORT, MACH_PORT_TYPE_RECEIVE, &name, (ipc_object_t *) &port); if (kr != KERN_SUCCESS) return kr; /* port is locked */ ipc_port_init(port, space, name); *namep = name; *portp = port; return KERN_SUCCESS; }
kern_return_t ipc_port_alloc( ipc_space_t space, mach_port_name_t *namep, ipc_port_t *portp) { ipc_port_t port; mach_port_name_t name; kern_return_t kr; #if MACH_ASSERT uintptr_t buf[IP_CALLSTACK_MAX]; ipc_port_callstack_init_debug(&buf[0], IP_CALLSTACK_MAX); #endif /* MACH_ASSERT */ kr = ipc_object_alloc(space, IOT_PORT, MACH_PORT_TYPE_RECEIVE, 0, &name, (ipc_object_t *) &port); if (kr != KERN_SUCCESS) return kr; /* port and space are locked */ ipc_port_init(port, space, name); #if MACH_ASSERT ipc_port_init_debug(port, &buf[0], IP_CALLSTACK_MAX); #endif /* MACH_ASSERT */ /* unlock space after init */ is_write_unlock(space); #if CONFIG_MACF_MACH task_t issuer = current_task(); tasklabel_lock2 (issuer, space->is_task); mac_port_label_associate(&issuer->maclabel, &space->is_task->maclabel, &port->ip_label); tasklabel_unlock2 (issuer, space->is_task); #endif *namep = name; *portp = port; return KERN_SUCCESS; }
ipc_port_t ipc_port_alloc_special( ipc_space_t space) { ipc_port_t port; port = (ipc_port_t) io_alloc(IOT_PORT); assert(port != IP_NULL); if (port == IP_NULL) return IP_NULL; bzero((char *)port, sizeof(*port)); io_lock_init(&port->ip_object); port->ip_references = 1; port->ip_object.io_bits = io_makebits(TRUE, IOT_PORT, 0); ipc_port_init(port, space, 1); return port; }