X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/b0d623f7f2ae71ed96e60569f61f9a9a27016e80..bb59bff194111743b33cc36712410b5656329d3c:/libkern/OSKextLib.cpp diff --git a/libkern/OSKextLib.cpp b/libkern/OSKextLib.cpp index 4876839af..175704eec 100644 --- a/libkern/OSKextLib.cpp +++ b/libkern/OSKextLib.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008 Apple Inc. All rights reserved. + * Copyright (c) 2008-2012 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -29,10 +29,6 @@ extern "C" { #include #include - -#include -#include -#include }; #include @@ -185,45 +181,6 @@ OSReturn OSKextCancelRequest( #if PRAGMA_MARK #pragma mark MIG Functions & Wrappers #endif -/********************************************************************* -* This function is for use only by OSKextLib.cpp and OSKext.cpp. -* -* xxx - can we cache the kextd port or do we have to get it each time -* xxx - in case it relaunches? -*********************************************************************/ -extern void ipc_port_release_send(ipc_port_t); - -kern_return_t OSKextPingKextd(void) -{ - kern_return_t result = KERN_FAILURE; - mach_port_t kextd_port = IPC_PORT_NULL; - - result = host_get_kextd_port(host_priv_self(), &kextd_port); - if (result != KERN_SUCCESS || !IPC_PORT_VALID(kextd_port)) { - OSKextLog(/* kext */ NULL, - kOSKextLogErrorLevel | - kOSKextLogIPCFlag, - "Can't get kextd port."); - goto finish; - } - - result = kextd_ping(kextd_port); - if (result != KERN_SUCCESS) { - OSKextLog(/* kext */ NULL, - kOSKextLogErrorLevel | - kOSKextLogIPCFlag, - "kextd ping failed (0x%x).", (int)result); - goto finish; - } - -finish: - if (IPC_PORT_VALID(kextd_port)) { - ipc_port_release_send(kextd_port); - } - - return result; -} - /********************************************************************* * IMPORTANT: Once we have done the vm_map_copyout(), we *must* return * KERN_SUCCESS or the kernel map gets messed up (reason as yet @@ -382,10 +339,12 @@ finish: (void)vm_deallocate(kernel_map, (vm_offset_t)request, requestLengthIn); } if (response) { - kmem_free(kernel_map, (vm_offset_t)response, responseLength); + /* 11981737 - clear uninitialized data in last page */ + kmem_free(kernel_map, (vm_offset_t)response, round_page(responseLength)); } if (logData) { - kmem_free(kernel_map, (vm_offset_t)logData, logDataLength); + /* 11981737 - clear uninitialized data in last page */ + kmem_free(kernel_map, (vm_offset_t)logData, round_page(logDataLength)); } return result; @@ -394,8 +353,8 @@ finish: /********************************************************************* * Gets the vm_map for the current kext *********************************************************************/ -extern vm_offset_t sectPRELINKB; -extern int sectSizePRELINK; +extern vm_offset_t segPRELINKB; +extern unsigned long segSizePRELINK; extern int kth_started; extern vm_map_t g_kext_map; @@ -405,8 +364,8 @@ kext_get_vm_map(kmod_info_t *info) vm_map_t kext_map = NULL; /* Set the vm map */ - if ((info->address >= sectPRELINKB) && - (info->address < (sectPRELINKB + sectSizePRELINK))) + if ((info->address >= segPRELINKB) && + (info->address < (segPRELINKB + segSizePRELINK))) { kext_map = kernel_map; } else { @@ -442,6 +401,16 @@ void OSKextRemoveKextBootstrap(void) return; } +#if CONFIG_DTRACE +/********************************************************************* +*********************************************************************/ +void OSKextRegisterKextsWithDTrace(void) +{ + OSKext::registerKextsWithDTrace(); + return; +} +#endif /* CONFIG_DTRACE */ + /********************************************************************* *********************************************************************/ void kext_dump_panic_lists(int (*printf_func)(const char * fmt, ...)) @@ -472,33 +441,35 @@ kmod_panic_dump(vm_offset_t * addr, unsigned int cnt) extern int kdb_printf(const char *format, ...) __printflike(1,2); OSKext::printKextsInBacktrace(addr, cnt, &kdb_printf, - /* takeLock? */ false); + /* takeLock? */ false, false); return; } /********************************************************************/ -void kmod_dump_log(vm_offset_t *addr, unsigned int cnt); +void kmod_dump_log(vm_offset_t *addr, unsigned int cnt, boolean_t doUnslide); void kmod_dump_log( vm_offset_t * addr, - unsigned int cnt) + unsigned int cnt, + boolean_t doUnslide) { - OSKext::printKextsInBacktrace(addr, cnt, &printf, /* lock? */ true); + OSKext::printKextsInBacktrace(addr, cnt, &printf, /* lock? */ true, doUnslide); } /********************************************************************* * Compatibility implementation for kmod_get_info() host_priv routine. * Only supported on old 32-bit architectures. *********************************************************************/ -#if __ppc__ || __i386__ -kern_return_t -kext_get_kmod_info( - kmod_info_array_t * kmod_list, - mach_msg_type_number_t * kmodCount) + +#if PRAGMA_MARK +#pragma mark Loaded Kext Summary +#endif + +void +OSKextLoadedKextSummariesUpdated(void) { - return OSKext::getKmodInfo(kmod_list, kmodCount); + // Do nothing. } -#endif /* __ppc__ || __i386__ */ };