Loading...
--- xnu/xnu-4903.221.2/libsa/bootstrap.cpp
+++ xnu/xnu-4570.71.2/libsa/bootstrap.cpp
@@ -29,6 +29,10 @@
#include <mach/kmod.h>
#include <libkern/kernel_mach_header.h>
#include <libkern/prelink.h>
+
+#if CONFIG_EMBEDDED
+extern uuid_t kernelcache_uuid;
+#endif
}
#include <libkern/version.h>
@@ -100,7 +104,6 @@
"com.apple.kpi.bsd",
"com.apple.kpi.dsep",
"com.apple.kpi.iokit",
- "com.apple.kpi.kasan",
"com.apple.kpi.libkern",
"com.apple.kpi.mach",
"com.apple.kpi.private",
@@ -243,7 +246,9 @@
OSDictionary * prelinkInfoDict = NULL; // do not release
OSString * errorString = NULL; // must release
OSKext * theKernel = NULL; // must release
+#if CONFIG_EMBEDDED
OSData * kernelcacheUUID = NULL; // do not release
+#endif
kernel_segment_command_t * prelinkTextSegment = NULL; // see code
kernel_segment_command_t * prelinkInfoSegment = NULL; // see code
@@ -369,19 +374,19 @@
ramDiskBoot = IORamDiskBSDRoot();
#endif /* NO_KEXTD */
+#if CONFIG_EMBEDDED
/* Copy in the kernelcache UUID */
kernelcacheUUID = OSDynamicCast(OSData,
prelinkInfoDict->getObject(kPrelinkInfoKCIDKey));
- if (kernelcacheUUID) {
- if (kernelcacheUUID->getLength() != sizeof(kernelcache_uuid)) {
- panic("kernelcacheUUID length is %d, expected %lu", kernelcacheUUID->getLength(),
- sizeof(kernelcache_uuid));
- } else {
- kernelcache_uuid_valid = TRUE;
- memcpy((void *)&kernelcache_uuid, (const void *)kernelcacheUUID->getBytesNoCopy(), kernelcacheUUID->getLength());
- uuid_unparse_upper(kernelcache_uuid, kernelcache_uuid_string);
- }
- }
+ if (!kernelcacheUUID) {
+ bzero(&kernelcache_uuid, sizeof(kernelcache_uuid));
+ } else if (kernelcacheUUID->getLength() != sizeof(kernelcache_uuid)) {
+ panic("kernelcacheUUID length is %d, expected %lu", kernelcacheUUID->getLength(),
+ sizeof(kernelcache_uuid));
+ } else {
+ memcpy((void *)&kernelcache_uuid, (const void *)kernelcacheUUID->getBytesNoCopy(), kernelcacheUUID->getLength());
+ }
+#endif /* CONFIG_EMBEDDED */
infoDictArray = OSDynamicCast(OSArray,
prelinkInfoDict->getObject(kPrelinkInfoDictionaryKey));
@@ -449,7 +454,7 @@
infoDict->getObject(kPrelinkExecutableSizeKey));
if (addressNum && lengthNum) {
#if __arm__ || __arm64__
- vm_offset_t data = ml_static_slide(addressNum->unsigned64BitValue());
+ vm_offset_t data = (vm_offset_t) ((addressNum->unsigned64BitValue()) + vm_kernel_slide);
vm_size_t length = (vm_size_t) (lengthNum->unsigned32BitValue());
ml_static_mfree(data, length);
#else
@@ -488,7 +493,7 @@
slideAddrSegIndex = __whereIsAddr( (vm_offset_t)slideAddr, &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
if (slideAddrSegIndex >= 0) {
- addrToSlideSegIndex = __whereIsAddr(ml_static_slide((vm_offset_t)(*slideAddr)), &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
+ addrToSlideSegIndex = __whereIsAddr( (vm_offset_t)(*slideAddr + vm_kernel_slide), &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
if (addrToSlideSegIndex < 0) {
badSlideTarget++;
continue;
@@ -500,7 +505,7 @@
}
slidKextAddrCount++;
- *slideAddr = ml_static_slide(*slideAddr);
+ *(slideAddr) += vm_kernel_slide;
} // for ...
/* All kexts are now slid, set VM protections for them */