Rosetta: OAHSoftwareUpdate.framework crashes, leaks OAHSoftwareUpdateController objects, invokes completion callback block multiple times

Originator:mark
Number:rdar://FB8914414 Date Originated:2020-11-23
Status:Open Resolved:
Product:macOS Product Version:11.0.1 20B29
Classification:Application Crash Reproducible:Usually
 
Background: One component of Chrome, Widevine (used for encrypted media playback), is not currently available for arm64. For the time being, we’re shipping an x86_64 version of Widevine to arm64 users, and hosting it in its own x86_64 process under Rosetta translation, communicating with an otherwise fully arm64 running version of Chrome.

In the case where Rosetta is not installed on the system but we detect that Widevine might be necessary, we offer the user the ability to install Rosetta. We can’t rely on the OS to do this for us, because the OS only offers to install Rosetta when launching an x86_64 .app via Launch Services and Rosetta is not already installed. In our case, the x86_64 process is a child of the browser’s, started with posix_spawn (https://chromium.googlesource.com/chromium/src/+/dcfbb59cc22614ae318618824fccc5d446adcb12/base/process/launch_mac.cc#262 base::LaunchProcess), and cannot be started via Launch Services. As such, we must manage this ourselves.

We’re currently using the (private, we know, but we’ve got a job to do here and app store distribution is not relevant to this case) OAHSoftwareUpdate.framework to perform the installation of Rosetta for us (https://chromium.googlesource.com/chromium/src/+/c780b01e35977685e78c948c6badc46ccd0e6333/base/mac/rosetta.mm#55 base::mac::RequestRosettaInstallation).

Aside from leaks and multiple calls to the completion callback block, we’re satisfied with how OAHSoftwareUpdate is working in “happy-path” cases where installation completes successfully. Unfortunately, “sad-path” cases, where the user clicks “Not Now” during download or installation, frequently result in crashes. These crashes are documented at https://crbug.com/1150538.

Steps to reproduce:

I’ve prepared a reduced test case for these crashes, in the attached InstallRosetta.tar.gz. This test case functions equally well whether or not Rosetta is already installed. Build and run the Xcode project, and try the following tests:

A. Cancel during download.
1. Click “Install”.
2. While Rosetta is downloading, QUICKLY click “Not Now”. If you can’t have your mouse positioned JUST right, hit the Return key as soon as possible after choosing “Install” in step 1.
3. Even though you clicked “Not Now”, an authentication dialog will appear. Authenticate as an administrator and click “Install Software”.

B. Cancel during install.
1. Click “Install”.
2. An authentication dialog will appear. Authenticate as an administrator and click “Install Software”.
3. While Rosetta is installing, QUICKLY click “Not Now”. If you can’t have your mouse positioned JUST right, hit the Return key as soon as possible after choosing “Install Software” in step 2.

Expected behavior:

The installation should be cancelled as soon as “Not Now” is clicked. The window should dismiss immediately, and no authentication dialogs should appear. The callback block should receive an indication that installation was cancelled, and all objects related to the installation should be released. The callback block should only be called once.

Observed behavior:

The installation window does not disappear when “Not Now” is clicked. If “Not Now” was clicked during download, the authentication dialog appears anyway, and after successfully authenticating, the application is likely to crash. If “Not Now” was clicked during installation, the application may crash. Even following a successful installation, the OAHSoftwareUpdateController object is leaked. The callback block may be called more than once (observe 2b below, where it’s called twice in succession, once with success = 0, and then again with success = 1).

System information:

mark@arm-and-hammer zsh% sw_vers
ProductName:	macOS
ProductVersion:	11.0.1
BuildVersion:	20B29
mark@arm-and-hammer zsh% xcodebuild -version
Xcode 12.2
Build version 12B45b
mark@arm-and-hammer zsh% uname -m
arm64
mark@arm-and-hammer zsh% system_profiler SPHardwareDataType | grep 'Model Identifier'
      Model Identifier: ADP3,2

Additional information:

Per https://crbug.com/1150538, here are two different characteristic stack backtraces reports that we observe when “Not Now” is clicked, along with equivalent log messages and backtraces from the attached test program.

1a. objc_fatal abort, Chrome crash report.

List Annotations objc_removeExceptionHandler() called with unknown alt handler; this is probably a bug in multithreaded AppKit use. 
Thread 0 (id: 0x000bbf2a) CRASHED [0x00000000 / 0x00000000 @ 0x000000019a168130 ] MAGIC SIGNATURE THREAD
Stack Quality84%Show frame trust levels
0x000000019a168130	(libsystem_kernel.dylib + 0x00029130)		__abort_with_payload
0x000000019a16aa1c	(libsystem_kernel.dylib + 0x0002ba1c)		abort_with_payload_wrapper_internal
0x000000019a16a9b4	(libsystem_kernel.dylib + 0x0002b9b4)		abort_with_reason
0x000000019a0351d8	(libobjc.A.dylib + 0x000291d8)		_objc_fatalv(unsigned long long, unsigned long long, char const*, char*)
0x000000019a035160	(libobjc.A.dylib + 0x00029160)		_objc_fatal(char const*, ...)
0x000000019a022634	(libobjc.A.dylib + 0x00016634)		alt_handler_error(unsigned long)
0x000000019a01d55c	(libobjc.A.dylib + 0x0001155c)		objc_removeExceptionHandler
0x000000019a239314	(CoreFoundation + 0x00049314)		_CFDoExceptionOperation
0x000000019cd6c4b8	(AppKit + 0x003674b8)		-[NSApplication endModalSession:]
0x00000001be9ddf50	(OAHSoftwareUpdate + 0x00010f50)		-[OAHSoftwareUpdateWindowController dismissWindow]
0x00000001be9dd99c	(OAHSoftwareUpdate + 0x0001099c)		__58-[OAHSoftwareUpdateWindowController installButtonClicked:]_block_invoke_2.203
0x0000000199fcc41c	(libdispatch.dylib + 0x0000441c)		_dispatch_client_callout
0x0000000199fcf798	(libdispatch.dylib + 0x00007798)		_dispatch_continuation_pop
0x0000000199fe1294	(libdispatch.dylib + 0x00019294)		_dispatch_source_invoke
0x0000000199fd9d00	(libdispatch.dylib + 0x00011d00)		_dispatch_main_queue_callback_4CF
0x000000019a2b39d8	(CoreFoundation + 0x000c39d8)		__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
0x000000019a272864	(CoreFoundation + 0x00082864)		__CFRunLoopRun

1b. objc_fatal abort, log and lldb output from the attached test program.

2020-11-23 14:37:32.537661-0500 InstallRosetta[2808:52674] Metal API Validation Enabled
2020-11-23 14:37:34.369166-0500 InstallRosetta[2808:53065] Package Authoring Error: 001-79711: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
2020-11-23 14:37:34.952145-0500 InstallRosetta[2808:52674] completion, success = 0, error = Error Domain=NSCocoaErrorDomain Code=3072 "The operation was cancelled."
objc[2808]: objc_removeExceptionHandler() called with unknown alt handler; this is probably a bug in multithreaded AppKit use. Set environment variable OBJC_DEBUG_ALT_HANDLERS=YES or break in objc_alt_handler_error() to debug.
objc[2808]: objc_removeExceptionHandler() called with unknown alt handler; this is probably a bug in multithreaded AppKit use. 
objc_removeExceptionHandler() called with unknown alt handler; this is probably a bug in multithreaded AppKit use.
(lldb) thread backtrace
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x000000018ff64130 libsystem_kernel.dylib`__abort_with_payload + 8
    frame #1: 0x000000018ff66a20 libsystem_kernel.dylib`abort_with_payload_wrapper_internal + 104
    frame #2: 0x000000018ff669b8 libsystem_kernel.dylib`abort_with_reason + 32
    frame #3: 0x000000018fe311dc libobjc.A.dylib`_objc_fatalv(unsigned long long, unsigned long long, char const*, char*) + 120
    frame #4: 0x000000018fe31164 libobjc.A.dylib`_objc_fatal(char const*, ...) + 44
    frame #5: 0x000000018fe1e638 libobjc.A.dylib`alt_handler_error(unsigned long) + 440
    frame #6: 0x000000018fe19560 libobjc.A.dylib`objc_removeExceptionHandler + 364
    frame #7: 0x0000000190035318 CoreFoundation`_CFDoExceptionOperation + 316
    frame #8: 0x0000000192b684bc AppKit`-[NSApplication endModalSession:] + 40
    frame #9: 0x00000001b47d9f54 OAHSoftwareUpdate`-[OAHSoftwareUpdateWindowController dismissWindow] + 196
    frame #10: 0x00000001b47d99a0 OAHSoftwareUpdate`__58-[OAHSoftwareUpdateWindowController installButtonClicked:]_block_invoke_2.203 + 44
    frame #11: 0x0000000104bbdd20 libdispatch.dylib`_dispatch_client_callout + 20
    frame #12: 0x0000000104bc13cc libdispatch.dylib`_dispatch_continuation_pop + 612
    frame #13: 0x0000000104bda3a4 libdispatch.dylib`_dispatch_source_invoke + 1380
    frame #14: 0x0000000104bcfd50 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 560
    frame #15: 0x00000001900af9dc CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16
    frame #16: 0x000000019006e868 CoreFoundation`__CFRunLoopRun + 2508
    frame #17: 0x000000019006d730 CoreFoundation`CFRunLoopRunSpecific + 600
    frame #18: 0x0000000197b76f0c HIToolbox`RunCurrentEventLoopInMode + 292
    frame #19: 0x0000000197b76d3c HIToolbox`ReceiveNextEventCommon + 688
    frame #20: 0x0000000197b76a6c HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 76
    frame #21: 0x0000000192842db0 AppKit`_DPSNextEvent + 868
    frame #22: 0x0000000192841730 AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1312
    frame #23: 0x000000019283358c AppKit`-[NSApplication run] + 600
    frame #24: 0x0000000192804d74 AppKit`NSApplicationMain + 1064
  * frame #25: 0x00000001049a736c InstallRosetta`main(argc=3, argv=0x000000016b45b438) at main.m:34:10
    frame #26: 0x000000018ff90f54 libdyld.dylib`start + 4

2a. malloc_report abort, Chrome crash report.

List Annotations abort() called
Google Chrome(36255,0x10056bd40) malloc: *** error for object 0x123c17720: pointer being freed was not allocated
Thread 0 (id: 0x000c3f70) CRASHED [0x00000000 / 0x00000000 @ 0x000000019a147cec ] MAGIC SIGNATURE THREAD
Stack Quality84%Show frame trust levels
0x000000019a147cec	(libsystem_kernel.dylib + 0x00008cec)		__pthread_kill
0x000000019a178c20	(libsystem_pthread.dylib + 0x00006c20)		pthread_kill
0x000000019a0c0860	(libsystem_c.dylib + 0x00078860)		abort
0x0000000199fabd04	(libsystem_malloc.dylib + 0x0000fd04)		malloc_vreport
0x0000000199faf454	(libsystem_malloc.dylib + 0x00013454)		malloc_report
0x0000000199f9e0fc	(libsystem_malloc.dylib + 0x000020fc)		free
0x000000019d34e29c	(AppKit + 0x0094929c)		-[_NSBlockDeallocationHook dealloc]
0x000000019a03490c	(libobjc.A.dylib + 0x0002890c)		AutoreleasePoolPage::releaseUntil(objc_object**)
0x000000019a013cfc	(libobjc.A.dylib + 0x00007cfc)		objc_autoreleasePoolPop
0x000000019a23114c	(CoreFoundation + 0x0004114c)		_CFAutoreleasePoolPop
0x000000019a347adc	(CoreFoundation + 0x00157adc)		__CFRunLoopPerCalloutARPEnd
0x000000019a2728a8	(CoreFoundation + 0x000828a8)		__CFRunLoopRun

2b. malloc_report abort, log and lldb output from the attached test program.

2020-11-23 14:40:24.578787-0500 InstallRosetta[2884:55316] Metal API Validation Enabled
2020-11-23 14:40:26.133875-0500 InstallRosetta[2884:55346] Package Authoring Error: 001-79711: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
2020-11-23 14:40:26.286167-0500 InstallRosetta[2884:55316] completion, success = 0, error = Error Domain=NSCocoaErrorDomain Code=3072 "The operation was cancelled."
2020-11-23 14:40:32.522308-0500 InstallRosetta[2884:55316] completion, success = 1, error = (null)
InstallRosetta(2884,0x102f4bd40) malloc: *** error for object 0x600001232e20: pointer being freed was not allocated
InstallRosetta(2884,0x102f4bd40) malloc: *** set a breakpoint in malloc_error_break to debug
InstallRosetta(2884,0x102f4bd40) malloc: *** error for object 0x600001232e20: pointer being freed was not allocated
(lldb) thread backtrace
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x000000018ff43cec libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000102df7384 libsystem_pthread.dylib`pthread_kill + 292
    frame #2: 0x000000018febc864 libsystem_c.dylib`abort + 104
    frame #3: 0x000000018fda7d08 libsystem_malloc.dylib`malloc_vreport + 560
    frame #4: 0x000000018fdab458 libsystem_malloc.dylib`malloc_report + 64
    frame #5: 0x000000018fd9a100 libsystem_malloc.dylib`free + 532
    frame #6: 0x000000019314a2a0 AppKit`-[_NSBlockDeallocationHook dealloc] + 40
    frame #7: 0x000000018fe30910 libobjc.A.dylib`AutoreleasePoolPage::releaseUntil(objc_object**) + 204
    frame #8: 0x000000018fe0fd00 libobjc.A.dylib`objc_autoreleasePoolPop + 212
    frame #9: 0x000000019002d150 CoreFoundation`_CFAutoreleasePoolPop + 32
    frame #10: 0x0000000190143ae0 CoreFoundation`__CFRunLoopPerCalloutARPEnd + 48
    frame #11: 0x000000019006e8ac CoreFoundation`__CFRunLoopRun + 2576
    frame #12: 0x000000019006d730 CoreFoundation`CFRunLoopRunSpecific + 600
    frame #13: 0x0000000197b76f0c HIToolbox`RunCurrentEventLoopInMode + 292
    frame #14: 0x0000000197b76d3c HIToolbox`ReceiveNextEventCommon + 688
    frame #15: 0x0000000197b76a6c HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 76
    frame #16: 0x0000000192842db0 AppKit`_DPSNextEvent + 868
    frame #17: 0x0000000192841730 AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1312
    frame #18: 0x000000019283358c AppKit`-[NSApplication run] + 600
    frame #19: 0x0000000192804d74 AppKit`NSApplicationMain + 1064
  * frame #20: 0x0000000102b1336c InstallRosetta`main(argc=3, argv=0x000000016d2ef438) at main.m:34:10
    frame #21: 0x000000018ff90f54 libdyld.dylib`start + 4

Comments

InstallRosetta.tar.gz.base64

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 HQAGSbIACgEA


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!