Loading...
--- xnu/xnu-12377.121.6/iokit/Kernel/i386/IOKeyStoreHelper.cpp
+++ xnu/xnu-3789.41.3/iokit/Kernel/i386/IOKeyStoreHelper.cpp
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- *
+ *
* 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
@@ -11,10 +11,10 @@
* 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,
@@ -22,7 +22,7 @@
* 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_OSREFERENCE_LICENSE_HEADER_END@
*/
@@ -47,263 +47,58 @@
void
IOSetKeyStoreData(IOMemoryDescriptor * data);
-// APFS
-static volatile UInt32 apfsKeyFetched = 0;
-static IOMemoryDescriptor* apfsKeyData = NULL;
-
-IOMemoryDescriptor* IOGetAPFSKeyStoreData();
-void IOSetAPFSKeyStoreData(IOMemoryDescriptor* data);
-
-static volatile UInt32 ARVRootHashFetched = 0;
-static volatile UInt32 bsARVRootHashFetched = 0;
-
-IOMemoryDescriptor* IOGetARVRootHashData(void);
-IOMemoryDescriptor* IOGetBaseSystemARVRootHashData(void);
-
-bool IOBaseSystemARVRootHashAvailable(void);
-
-static volatile UInt32 ARVManifestFetched = 0;
-static volatile UInt32 bsARVManifestFetched = 0;
-
-IOMemoryDescriptor* IOGetARVManifestData(void);
-IOMemoryDescriptor* IOGetBaseSystemARVManifestData(void);
-
__END_DECLS
#if 1
-#define DEBG(fmt, args...) { kprintf(fmt, ## args); }
+#define DEBG(fmt, args...) { kprintf(fmt, ## args); }
#else
-#define DEBG(fmt, args...) {}
+#define DEBG(fmt, args...) {}
#endif
void
IOSetKeyStoreData(IOMemoryDescriptor * data)
{
- newData = data;
- alreadyFetched = 0;
+ newData = data;
+ alreadyFetched = 0;
}
IOMemoryDescriptor *
IOGetBootKeyStoreData(void)
{
- IOMemoryDescriptor *memoryDescriptor;
- boot_args *args = (boot_args *)PE_state.bootArgs;
- IOOptionBits options;
- IOAddressRange ranges;
+ IOMemoryDescriptor *memoryDescriptor;
+ boot_args *args = (boot_args *)PE_state.bootArgs;
+ IOOptionBits options;
+ IOAddressRange ranges;
- if (!OSCompareAndSwap(0, 1, &alreadyFetched)) {
- return NULL;
- }
+ if (!OSCompareAndSwap(0, 1, &alreadyFetched))
+ return (NULL);
- if (newData) {
- IOMemoryDescriptor * data = newData;
- newData = NULL;
- return data;
- }
+ if (newData)
+ {
+ IOMemoryDescriptor * data = newData;
+ newData = NULL;
+ return (data);
+ }
- DEBG("%s: data at address %u size %u\n", __func__,
- args->keyStoreDataStart,
- args->keyStoreDataSize);
+ DEBG("%s: data at address %u size %u\n", __func__,
+ args->keyStoreDataStart,
+ args->keyStoreDataSize);
- if (args->keyStoreDataStart == 0) {
- return NULL;
- }
+ if (args->keyStoreDataStart == 0)
+ return (NULL);
- ranges.address = args->keyStoreDataStart;
- ranges.length = args->keyStoreDataSize;
+ ranges.address = args->keyStoreDataStart;
+ ranges.length = args->keyStoreDataSize;
- options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
+ options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
+
+ memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges,
+ 1,
+ 0,
+ NULL,
+ options);
- memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges,
- 1,
- 0,
- NULL,
- options);
+ DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
-
- return memoryDescriptor;
+ return memoryDescriptor;
}
-
-// APFS volume key fetcher
-
-// Store in-memory key (could be used by IOHibernateDone)
-void
-IOSetAPFSKeyStoreData(IOMemoryDescriptor* data)
-{
- // Do not allow re-fetching of the boot_args key by passing NULL here.
- if (data != NULL) {
- apfsKeyData = data;
- apfsKeyFetched = 0;
- }
-}
-
-// Retrieve any key we may have (stored in boot_args or by Hibernate)
-IOMemoryDescriptor*
-IOGetAPFSKeyStoreData()
-{
- // Check if someone got the key before us
- if (!OSCompareAndSwap(0, 1, &apfsKeyFetched)) {
- return NULL;
- }
-
- // Do we have in-memory key?
- if (apfsKeyData) {
- IOMemoryDescriptor* data = apfsKeyData;
- apfsKeyData = NULL;
- return data;
- }
-
- // Looks like there was no in-memory key and it's the first call - try boot_args
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- DEBG("%s: data at address %u size %u\n", __func__, args->apfsDataStart, args->apfsDataSize);
- if (args->apfsDataStart == 0) {
- return NULL;
- }
-
- // We have the key in the boot_args, create IOMemoryDescriptor for the blob
- IOAddressRange ranges;
- ranges.address = args->apfsDataStart;
- ranges.length = args->apfsDataSize;
-
- const IOOptionBits options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
-
- IOMemoryDescriptor* memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges, 1, 0, NULL, options);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- return memoryDescriptor;
-}
-
-// ARV Root Hash fetcher
-
-// Retrieve any root hash we may have (stored in boot_args)
-IOMemoryDescriptor*
-IOGetARVRootHashData(void)
-{
- // Check if someone got the root hash before us
- if (!OSCompareAndSwap(0, 1, &ARVRootHashFetched)) {
- return NULL;
- }
-
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- DEBG("%s: data at address %llu size %llu\n", __func__, args->arvRootHashStart, args->arvRootHashSize);
- if (args->arvRootHashStart == 0) {
- return NULL;
- }
-
- // We have the root hash in the boot_args, create IOMemoryDescriptor for the blob
- IOAddressRange ranges;
- ranges.address = args->arvRootHashStart;
- ranges.length = args->arvRootHashSize;
-
- const IOOptionBits options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
-
- IOMemoryDescriptor* memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges, 1, 0, NULL, options);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- return memoryDescriptor;
-}
-
-// Base System Analogue
-
-IOMemoryDescriptor*
-IOGetBaseSystemARVRootHashData(void)
-{
- // Check if someone got the base system root hash before us
- if (!OSCompareAndSwap(0, 1, &bsARVRootHashFetched)) {
- return NULL;
- }
-
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- DEBG("%s: data at address %llu size %llu\n", __func__, args->bsARVRootHashStart, args->bsARVRootHashSize);
- if (args->bsARVRootHashStart == 0) {
- return NULL;
- }
-
- // We have the base system root hash in the boot_args, create IOMemoryDescriptor for the blob
- IOAddressRange ranges;
- ranges.address = args->bsARVRootHashStart;
- ranges.length = args->bsARVRootHashSize;
-
- const IOOptionBits options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
-
- IOMemoryDescriptor* memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges, 1, 0, NULL, options);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- return memoryDescriptor;
-}
-
-bool
-IOBaseSystemARVRootHashAvailable(void)
-{
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- if (args->bsARVRootHashStart == 0 || args->bsARVRootHashSize == 0) {
- return false;
- }
-
- if (args->bsARVManifestStart == 0 || args->bsARVManifestSize == 0) {
- return false;
- }
-
- return true;
-}
-
-// ARV Manifest fetcher
-
-// Retrieve any manifest we may have (stored in boot_args)
-IOMemoryDescriptor*
-IOGetARVManifestData(void)
-{
- // Check if someone got the manifest before us
- if (!OSCompareAndSwap(0, 1, &ARVManifestFetched)) {
- return NULL;
- }
-
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- DEBG("%s: data at address %llu size %llu\n", __func__, args->arvManifestStart, args->arvManifestSize);
- if (args->arvManifestStart == 0) {
- return NULL;
- }
-
- // We have the manifest in the boot_args, create IOMemoryDescriptor for the blob
- IOAddressRange ranges;
- ranges.address = args->arvManifestStart;
- ranges.length = args->arvManifestSize;
-
- const IOOptionBits options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
-
- IOMemoryDescriptor* memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges, 1, 0, NULL, options);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- return memoryDescriptor;
-}
-
-// Base System Analogue
-
-IOMemoryDescriptor*
-IOGetBaseSystemARVManifestData(void)
-{
- // Check if someone got the base system manifest before us
- if (!OSCompareAndSwap(0, 1, &bsARVManifestFetched)) {
- return NULL;
- }
-
- boot_args* args = (boot_args*)PE_state.bootArgs;
-
- DEBG("%s: data at address %llu size %llu\n", __func__, args->bsARVManifestStart, args->bsARVManifestSize);
- if (args->bsARVManifestStart == 0) {
- return NULL;
- }
-
- // We have the manifest in the boot_args, create IOMemoryDescriptor for the blob
- IOAddressRange ranges;
- ranges.address = args->bsARVManifestStart;
- ranges.length = args->bsARVManifestSize;
-
- const IOOptionBits options = kIODirectionInOut | kIOMemoryTypePhysical64 | kIOMemoryMapperNone;
-
- IOMemoryDescriptor* memoryDescriptor = IOMemoryDescriptor::withOptions(&ranges, 1, 0, NULL, options);
- DEBG("%s: memory descriptor %p\n", __func__, memoryDescriptor);
- return memoryDescriptor;
-}