X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/d7e50217d7adf6e52786a38bcaa4cd698cb9a79e..8ad349bb6ed4a0be06e34c92be0d98b92e078db4:/osfmk/ipc/ipc_object.c?ds=sidebyside diff --git a/osfmk/ipc/ipc_object.c b/osfmk/ipc/ipc_object.c index df9081bef..f6edc39ec 100644 --- a/osfmk/ipc/ipc_object.c +++ b/osfmk/ipc/ipc_object.c @@ -1,26 +1,31 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_LICENSE_OSREFERENCE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. - * - * 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. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this + * 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, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and + * + * 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, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and * limitations under the License. - * - * @APPLE_LICENSE_HEADER_END@ + * + * @APPLE_LICENSE_OSREFERENCE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -62,11 +67,16 @@ #include +#include #include #include #include #include + +#include #include + +#include #include #include #include @@ -234,9 +244,6 @@ ipc_object_alloc_dead( ipc_entry_t entry; kern_return_t kr; - int i; - - kr = ipc_entry_alloc(space, namep, &entry); if (kr != KERN_SUCCESS) return kr; @@ -272,9 +279,6 @@ ipc_object_alloc_dead_name( ipc_entry_t entry; kern_return_t kr; - int i; - - kr = ipc_entry_alloc_name(space, name, &entry); if (kr != KERN_SUCCESS) return kr; @@ -488,8 +492,6 @@ ipc_object_copyin( ipc_port_t soright; kern_return_t kr; - int i; - /* * Could first try a read lock when doing * MACH_MSG_TYPE_COPY_SEND, MACH_MSG_TYPE_MAKE_SEND, @@ -520,7 +522,8 @@ ipc_object_copyin( * Copyin a naked capability from the kernel. * * MACH_MSG_TYPE_MOVE_RECEIVE - * The receiver must be ipc_space_kernel. + * The receiver must be ipc_space_kernel + * or the receive right must already be in limbo. * Consumes the naked receive right. * MACH_MSG_TYPE_COPY_SEND * A naked send right must be supplied. @@ -554,14 +557,15 @@ ipc_object_copyin_from_kernel( ip_lock(port); assert(ip_active(port)); - assert(port->ip_receiver_name != MACH_PORT_NULL); - assert(port->ip_receiver == ipc_space_kernel); + if (port->ip_destination != IP_NULL) { + assert(port->ip_receiver == ipc_space_kernel); - /* relevant part of ipc_port_clear_receiver */ - ipc_port_set_mscount(port, 0); + /* relevant part of ipc_port_clear_receiver */ + ipc_port_set_mscount(port, 0); - port->ip_receiver_name = MACH_PORT_NULL; - port->ip_destination = IP_NULL; + port->ip_receiver_name = MACH_PORT_NULL; + port->ip_destination = IP_NULL; + } ip_unlock(port); break; } @@ -594,9 +598,11 @@ ipc_object_copyin_from_kernel( break; } - case MACH_MSG_TYPE_MOVE_SEND: + case MACH_MSG_TYPE_MOVE_SEND: { /* move naked send right into the message */ + assert(((ipc_port_t)object)->ip_srights); break; + } case MACH_MSG_TYPE_MAKE_SEND_ONCE: { ipc_port_t port = (ipc_port_t) object; @@ -611,9 +617,11 @@ ipc_object_copyin_from_kernel( break; } - case MACH_MSG_TYPE_MOVE_SEND_ONCE: + case MACH_MSG_TYPE_MOVE_SEND_ONCE: { /* move naked send-once right into the message */ + assert(((ipc_port_t)object)->ip_sorights); break; + } default: panic("ipc_object_copyin_from_kernel: strange rights"); @@ -776,8 +784,6 @@ ipc_object_copyout_name( ipc_entry_t entry; kern_return_t kr; - int i; - assert(IO_VALID(object)); assert(io_otype(object) == IOT_PORT); @@ -920,6 +926,7 @@ ipc_object_copyout_dest( default: panic("ipc_object_copyout_dest: strange rights"); + name = MACH_PORT_DEAD; } *namep = name; @@ -948,8 +955,6 @@ ipc_object_rename( ipc_entry_t oentry, nentry; kern_return_t kr; - int i; - kr = ipc_entry_alloc_name(space, nname, &nentry); if (kr != KERN_SUCCESS) return kr; @@ -993,7 +998,7 @@ io_free( ipc_port_track_dealloc(port); #endif /* MACH_ASSERT */ } - zfree(ipc_object_zones[otype], (vm_offset_t) object); + zfree(ipc_object_zones[otype], object); } #endif /* MACH_ASSERT */ @@ -1001,6 +1006,7 @@ io_free( #if MACH_KDB #include +#include #define printf kdbprintf @@ -1010,7 +1016,7 @@ io_free( * Pretty-print an object for kdb. */ -char *ikot_print_array[IKOT_MAX_TYPE] = { +const char *ikot_print_array[IKOT_MAX_TYPE] = { "(NONE) ", "(THREAD) ", "(TASK) ",