Post

Replies

Boosts

Views

Activity

Reading NVMe Telemetry Logs on macOS: Create Bit and Log Page Offset Support
I am developing a diagnostic tool for an external NVMe storage device connected to a Mac through USB4 PCIe tunnelling. The device appears under IONVMeController and IONVMeBlockStorageDevice, not as USB mass storage. Basic communication works through IONVMeSMARTInterface, but I have not found a supported way to request a fresh host-initiated telemetry snapshot or retrieve its data using log-page offsets. Environment macOS 26.5.1, build 25F80 Apple Silicon, arm64 NVMe SMART interface version 1, revision 0 Controller Identify reports Log Page Attributes 0x0f, including telemetry support What Works I open the interface using IOCreatePlugInInterfaceForService and QueryInterface with the UUIDs declared in the SDK’s NVMeSMARTLibExternal.h. The following operations succeed: GetIdentifyData SMARTReadData GetLogPage for the SMART/health log, LID 0x02 Reading the host-initiated telemetry header, LID 0x07 My current prototype uses Python ctypes, with the layout and signatures matching the SDK header. Required Telemetry Operations For host-initiated telemetry, the application needs to: Issue Get Log Page for LID 0x07, with LSP bit 0 set to request snapshot creation: CDW10 bit 8. Read the 512-byte telemetry header to determine the available data size. Retrieve subsequent portions of the same snapshot using the log-page offset in CDW12/CDW13. I would also like to understand whether RAE, CDW10 bit 15, can be controlled. This workflow works on Windows and Linux against the same device. We have access to device-side command logging, so we can inspect the command fields received by the firmware. Available macOS API The SDK declares: IOReturn (*GetLogPage)( void *interface, void *data, uint32_t inLogPageId, uint32_t inNumDWords); The header describes inNumDWords as zero-based and references NVMe revision 1.0c. I do not see parameters for LSP, RAE, or the log-page offset. The published documentation is: https://developer.apple.com/documentation/iokit/ionvmesmartinterface/3521169-getlogpage Observed Behavior An ordinary 512-byte telemetry read produces the following device-side command: CDW10 = 0x007f0007 CDW11 = 0x00000000 CDW12 = 0x00000000 CDW13 = 0x00000000 LID = 0x07 LSP = 0 Create = false NUMD = 127 Offset = 0 The firmware returns a valid telemetry header advertising no payload because no snapshot has been created. For comparison, the working Windows request reaches the device as: CDW10 = 0x007f0107 Create = true The firmware then creates an approximately 32 KiB diagnostic archive. Subsequent Windows requests retrieve it in chunks using nonzero CDW12 offsets. As an explicitly unsupported experiment, I passed inLogPageId = 0x0107 to test whether the additional bit could reach CDW10. The call succeeded, but the device still received CDW10 = 0x007f0007; Create was not set. Inspection of the installed NVMeSMARTLib plugin shows that its wrapper forwards the two 32-bit arguments unchanged toIOConnectCallStructMethod, selector 5. This does not establish how the kernel driver interprets them, and I am not relying on that experimental encoding as a supported API. Questions Is there a supported userspace interface for NVMe Get Log Page that exposes LSP/Create, RAE, and the 64-bit log-page offset? Does IONVMeSMARTInterface.GetLogPage support these fields through any documented mechanism that I have missed? If not, is there another supported NVMe admin-command interface available to third-party applications for external PCIe-tunnelled controllers? What transfer-size limits and privilege or entitlement requirements apply to the recommended interface? If this functionality is not currently exposed, is Feedback Assistant the appropriate place to request it, and which component should the report target? I am looking for a supported solution that works with normal macOS security settings, without disabling SIP or replacing the active storage driver. The goal is diagnostic telemetry retrieval, not firmware updating or namespace writes.
1
0
68
2w
Signed application crashed at launch
We are building an installer application to install a dext. Building in Xcode, the installer app launches fine locally and installs the dext. We then try to sign it with the company Developer ID application certificate. However after doing so we cannot launch the application anymore as we get the following crash at launch: Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: CODESIGNING 1 Taskgated Invalid Signature Triggered by Thread: 0 Thread 0 Crashed: 0 dyld_path_missing 0x102e187c0 _dyld_start + 0 Thread 0 crashed with ARM Thread State (64-bit): x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000000000000 x4: 0x0000000000000000 x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x0000000000000000 x8: 0x0000000000000000 x9: 0x0000000000000000 x10: 0x0000000000000000 x11: 0x0000000000000000 x12: 0x0000000000000000 x13: 0x0000000000000000 x14: 0x0000000000000000 x15: 0x0000000000000000 x16: 0x0000000000000000 x17: 0x0000000000000000 x18: 0x0000000000000000 x19: 0x0000000000000000 x20: 0x0000000000000000 x21: 0x0000000000000000 x22: 0x0000000000000000 x23: 0x0000000000000000 x24: 0x0000000000000000 x25: 0x0000000000000000 x26: 0x0000000000000000 x27: 0x0000000000000000 x28: 0x0000000000000000 fp: 0x0000000000000000 lr: 0x0000000000000000 sp: 0x000000016d13fba0 pc: 0x0000000102e187c0 cpsr: 0x00000000 far: 0x0000000000000000 esr: 0x00000000 Address size fault Binary Images: 0x102e14000 - 0x102eaffff dyld_path_missing (*) <9cf0401a-a938-389e-a77d-9e9608076ccf> /dyld_path_missing 0x102cc0000 - 0x102cc3fff main_executable_path_missing (*) <5fb2bea6-ba11-340d-a7a4-8657d5a736e2> /main_executable_path_missing 0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ??? Error Formulating Crash Report: dyld_process_snapshot_get_shared_cache failed Following the different help pages from Apple, the application seems to be correctly signed. Looking at the Console, we are seeing the following message at launch: "Unsatisfied entitlements: com.apple.developer.system-extension.install, com.apple.developer.driverkit". However, the entitlement file I am using to sign the installer app contains those entitlements. We are looking at different possible issues for days now and can't figure it out. Any advice or thought would be appreciated.
Topic: Code Signing SubTopic: General
2
0
622
Jul ’25
Reading NVMe Telemetry Logs on macOS: Create Bit and Log Page Offset Support
I am developing a diagnostic tool for an external NVMe storage device connected to a Mac through USB4 PCIe tunnelling. The device appears under IONVMeController and IONVMeBlockStorageDevice, not as USB mass storage. Basic communication works through IONVMeSMARTInterface, but I have not found a supported way to request a fresh host-initiated telemetry snapshot or retrieve its data using log-page offsets. Environment macOS 26.5.1, build 25F80 Apple Silicon, arm64 NVMe SMART interface version 1, revision 0 Controller Identify reports Log Page Attributes 0x0f, including telemetry support What Works I open the interface using IOCreatePlugInInterfaceForService and QueryInterface with the UUIDs declared in the SDK’s NVMeSMARTLibExternal.h. The following operations succeed: GetIdentifyData SMARTReadData GetLogPage for the SMART/health log, LID 0x02 Reading the host-initiated telemetry header, LID 0x07 My current prototype uses Python ctypes, with the layout and signatures matching the SDK header. Required Telemetry Operations For host-initiated telemetry, the application needs to: Issue Get Log Page for LID 0x07, with LSP bit 0 set to request snapshot creation: CDW10 bit 8. Read the 512-byte telemetry header to determine the available data size. Retrieve subsequent portions of the same snapshot using the log-page offset in CDW12/CDW13. I would also like to understand whether RAE, CDW10 bit 15, can be controlled. This workflow works on Windows and Linux against the same device. We have access to device-side command logging, so we can inspect the command fields received by the firmware. Available macOS API The SDK declares: IOReturn (*GetLogPage)( void *interface, void *data, uint32_t inLogPageId, uint32_t inNumDWords); The header describes inNumDWords as zero-based and references NVMe revision 1.0c. I do not see parameters for LSP, RAE, or the log-page offset. The published documentation is: https://developer.apple.com/documentation/iokit/ionvmesmartinterface/3521169-getlogpage Observed Behavior An ordinary 512-byte telemetry read produces the following device-side command: CDW10 = 0x007f0007 CDW11 = 0x00000000 CDW12 = 0x00000000 CDW13 = 0x00000000 LID = 0x07 LSP = 0 Create = false NUMD = 127 Offset = 0 The firmware returns a valid telemetry header advertising no payload because no snapshot has been created. For comparison, the working Windows request reaches the device as: CDW10 = 0x007f0107 Create = true The firmware then creates an approximately 32 KiB diagnostic archive. Subsequent Windows requests retrieve it in chunks using nonzero CDW12 offsets. As an explicitly unsupported experiment, I passed inLogPageId = 0x0107 to test whether the additional bit could reach CDW10. The call succeeded, but the device still received CDW10 = 0x007f0007; Create was not set. Inspection of the installed NVMeSMARTLib plugin shows that its wrapper forwards the two 32-bit arguments unchanged toIOConnectCallStructMethod, selector 5. This does not establish how the kernel driver interprets them, and I am not relying on that experimental encoding as a supported API. Questions Is there a supported userspace interface for NVMe Get Log Page that exposes LSP/Create, RAE, and the 64-bit log-page offset? Does IONVMeSMARTInterface.GetLogPage support these fields through any documented mechanism that I have missed? If not, is there another supported NVMe admin-command interface available to third-party applications for external PCIe-tunnelled controllers? What transfer-size limits and privilege or entitlement requirements apply to the recommended interface? If this functionality is not currently exposed, is Feedback Assistant the appropriate place to request it, and which component should the report target? I am looking for a supported solution that works with normal macOS security settings, without disabling SIP or replacing the active storage driver. The goal is diagnostic telemetry retrieval, not firmware updating or namespace writes.
Replies
1
Boosts
0
Views
68
Activity
2w
Signed application crashed at launch
We are building an installer application to install a dext. Building in Xcode, the installer app launches fine locally and installs the dext. We then try to sign it with the company Developer ID application certificate. However after doing so we cannot launch the application anymore as we get the following crash at launch: Exception Codes: 0x0000000000000000, 0x0000000000000000 Termination Reason: CODESIGNING 1 Taskgated Invalid Signature Triggered by Thread: 0 Thread 0 Crashed: 0 dyld_path_missing 0x102e187c0 _dyld_start + 0 Thread 0 crashed with ARM Thread State (64-bit): x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000000000000 x4: 0x0000000000000000 x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x0000000000000000 x8: 0x0000000000000000 x9: 0x0000000000000000 x10: 0x0000000000000000 x11: 0x0000000000000000 x12: 0x0000000000000000 x13: 0x0000000000000000 x14: 0x0000000000000000 x15: 0x0000000000000000 x16: 0x0000000000000000 x17: 0x0000000000000000 x18: 0x0000000000000000 x19: 0x0000000000000000 x20: 0x0000000000000000 x21: 0x0000000000000000 x22: 0x0000000000000000 x23: 0x0000000000000000 x24: 0x0000000000000000 x25: 0x0000000000000000 x26: 0x0000000000000000 x27: 0x0000000000000000 x28: 0x0000000000000000 fp: 0x0000000000000000 lr: 0x0000000000000000 sp: 0x000000016d13fba0 pc: 0x0000000102e187c0 cpsr: 0x00000000 far: 0x0000000000000000 esr: 0x00000000 Address size fault Binary Images: 0x102e14000 - 0x102eaffff dyld_path_missing (*) <9cf0401a-a938-389e-a77d-9e9608076ccf> /dyld_path_missing 0x102cc0000 - 0x102cc3fff main_executable_path_missing (*) <5fb2bea6-ba11-340d-a7a4-8657d5a736e2> /main_executable_path_missing 0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ??? Error Formulating Crash Report: dyld_process_snapshot_get_shared_cache failed Following the different help pages from Apple, the application seems to be correctly signed. Looking at the Console, we are seeing the following message at launch: "Unsatisfied entitlements: com.apple.developer.system-extension.install, com.apple.developer.driverkit". However, the entitlement file I am using to sign the installer app contains those entitlements. We are looking at different possible issues for days now and can't figure it out. Any advice or thought would be appreciated.
Topic: Code Signing SubTopic: General
Replies
2
Boosts
0
Views
622
Activity
Jul ’25