Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QtWebEngine signing issues



  • Re: QtWebEngine signing issues

    I'm experiencing problems similar to https://forum.qt.io/topic/102212/qtwebengine-signing-issues. QtWebEngine on macOS doesn't work with 'Hardened runtime' enabled.
    I did exactly what is suggested in that thread, but QtWebEngine still doesn't work. It doesn't seem to load and in the background QtWebEngineProcess crashes repeatedly. Below is the crash report for this, all crash reports are very similar. I'm using macOS 10.14.4 with Qt 5.9.3 (also tried 5.9.7). I tried enabling all possible entitlements for QtWebEngineProcess and it didn't help. Can anybody help or at least point out what I can try next to fix this?

    Process:               QtWebEngineProcess [12723]
    Path:                  /MyFolder/*/MyApp.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
    Identifier:            org.qt-project.Qt.QtWebEngineProcess
    Version:               0
    Code Type:             X86-64 (Native)
    Parent Process:        MyApp [12675]
    Responsible:           QtWebEngineProcess [12723]
    User ID:               501
    
    Date/Time:             2019-09-16 17:33:02.860 +0700
    OS Version:            Mac OS X 10.14.4 (18E226)
    Report Version:        12
    Anonymous UUID:        C4FFDC66-0AA9-192B-431A-CB43347D2482
    
    
    Time Awake Since Boot: 14000 seconds
    
    System Integrity Protection: enabled
    
    Crashed Thread:        0  CrRendererMain  Dispatch queue: com.apple.main-thread
    
    Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000010
    Exception Note:        EXC_CORPSE_NOTIFY
    
    Termination Signal:    Segmentation fault: 11
    Termination Reason:    Namespace SIGNAL, Code 0xb
    Terminating Process:   exc handler [12723]
    
    VM Regions Near 0x10:
    --> 
        __TEXT                 0000000109e95000-0000000109e9a000 [   20K] r-x/rwx SM=COW  /MyFolder/*/MyApp.app/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
    
    Thread 0 Crashed:: CrRendererMain  Dispatch queue: com.apple.main-thread
    0   org.qt-project.Qt.QtWebEngineCore	0x000000010c32fdbe v8::internal::Deoptimizer::GetDeoptimizationEntry(v8::internal::Isolate*, int, v8::internal::Deoptimizer::BailoutType, v8::internal::Deoptimizer::GetEntryMode) + 94
    1   org.qt-project.Qt.QtWebEngineCore	0x000000010c3703e1 v8::internal::ExternalReferenceTable::AddDeoptEntries(v8::internal::Isolate*) + 97
    2   org.qt-project.Qt.QtWebEngineCore	0x000000010c36bc02 v8::internal::ExternalReferenceTable::ExternalReferenceTable(v8::internal::Isolate*) + 210
    3   org.qt-project.Qt.QtWebEngineCore	0x000000010c36bb0e v8::internal::ExternalReferenceTable::instance(v8::internal::Isolate*) + 46
    4   org.qt-project.Qt.QtWebEngineCore	0x000000010c6d72d9 v8::internal::Deserializer::Deserialize(v8::internal::Isolate*) + 25
    5   org.qt-project.Qt.QtWebEngineCore	0x000000010c478d46 v8::internal::Isolate::Init(v8::internal::Deserializer*) + 9878
    6   org.qt-project.Qt.QtWebEngineCore	0x000000010c6dfb53 v8::internal::Snapshot::Initialize(v8::internal::Isolate*) + 723
    7   org.qt-project.Qt.QtWebEngineCore	0x000000010bfbdf09 v8::Isolate::New(v8::Isolate::CreateParams const&) + 361
    8   org.qt-project.Qt.QtWebEngineCore	0x000000010bf8750c gin::IsolateHolder::IsolateHolder(gin::IsolateHolder::AccessMode) + 284
    9   org.qt-project.Qt.QtWebEngineCore	0x000000010d2e9cbf blink::V8PerIsolateData::V8PerIsolateData() + 31
    10  org.qt-project.Qt.QtWebEngineCore	0x000000010d2ea382 blink::V8PerIsolateData::initialize() + 34
    11  org.qt-project.Qt.QtWebEngineCore	0x000000010d2e38cb blink::V8Initializer::initializeMainThread() + 107
    12  org.qt-project.Qt.QtWebEngineCore	0x000000010d267ac4 blink::initialize(blink::Platform*) + 20
    13  org.qt-project.Qt.QtWebEngineCore	0x000000010cedc97e content::RenderThreadImpl::InitializeWebKit(scoped_refptr<base::SingleThreadTaskRunner>&) + 174
    14  org.qt-project.Qt.QtWebEngineCore	0x000000010cedaecc content::RenderThreadImpl::Init(scoped_refptr<base::SingleThreadTaskRunner>&) + 300
    15  org.qt-project.Qt.QtWebEngineCore	0x000000010ceda65a content::RenderThreadImpl::RenderThreadImpl(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) + 1434
    16  org.qt-project.Qt.QtWebEngineCore	0x000000010ceda07c content::RenderThreadImpl::Create(std::__1::unique_ptr<base::MessageLoop, std::__1::default_delete<base::MessageLoop> >, std::__1::unique_ptr<blink::scheduler::RendererScheduler, std::__1::default_delete<blink::scheduler::RendererScheduler> >) + 76
    17  org.qt-project.Qt.QtWebEngineCore	0x000000010cf0b165 content::RendererMain(content::MainFunctionParams const&) + 517
    18  org.qt-project.Qt.QtWebEngineCore	0x000000010aa395b5 content::ContentMainRunnerImpl::Run() + 437
    19  org.qt-project.Qt.QtWebEngineCore	0x000000010aa38976 content::ContentMain(content::ContentMainParams const&) + 54
    20  org.qt-project.Qt.QtWebEngineCore	0x0000000109ee2e36 QtWebEngine::processMain(int, char const**) + 70
    21  org.qt-project.Qt.QtWebEngineProcess	0x0000000109e99f54 0x109e95000 + 20308
    22  libdyld.dylib                 	0x00007fff7e1433d5 start + 1
    
    Thread 1:
    0   libsystem_pthread.dylib       	0x00007fff7e3303f0 start_wqthread + 0
    
    Thread 2:
    0   libsystem_pthread.dylib       	0x00007fff7e3303f0 start_wqthread + 0
    
    Thread 3:: Dispatch queue: com.apple.root.utility-qos.overcommit
    0   com.apple.CoreFoundation      	0x00007fff51bf8fae __CFStringCreateImmutableFunnel3 + 1472
    1   com.apple.CoreFoundation      	0x00007fff51bfffec CFStringCreateWithBytes + 27
    2   com.apple.CoreServicesInternal	0x00007fff662f8653 BookmarkData::copyItem(CFBookmarkDataItem const*, unsigned long) const + 1333
    3   com.apple.CoreServicesInternal	0x00007fff662f8115 copyIndexedPathComponent(BookmarkData&, unsigned int, unsigned int) + 109
    4   com.apple.CoreServicesInternal	0x00007fff662f7d9c copyPathComponentsAsString(BookmarkData&, unsigned int, int, bool) + 390
    5   com.apple.CoreServicesInternal	0x00007fff662f7bb5 returnPathComponentsAsString(BookmarkData&, unsigned int, unsigned long long) + 26
    6   com.apple.CoreServicesInternal	0x00007fff662f7b33 BookmarkCopyPropertyFromBookmarkData(BookmarkData&, __CFString const*, unsigned long) + 100
    7   com.apple.CoreServicesInternal	0x00007fff662f7948 _CFURLCreateResourcePropertiesForKeysFromBookmarkData + 241
    8   com.apple.CoreFoundation      	0x00007fff51c88380 +[NSURL resourceValuesForKeys:fromBookmarkData:] + 25
    9   com.apple.LaunchServices      	0x00007fff53226aed +[FSNode(BookmarkData) pathForBookmarkData:error:] + 114
    10  com.apple.LaunchServices      	0x00007fff532269ff +[FSNode(BookmarkData) nameForBookmarkData:error:] + 37
    11  com.apple.LaunchServices      	0x00007fff5328c272 invocation function for block in int __FSNODE_BRIDGE_TO_CF__<__CFString const, __CFData const*>(objc_selector*, __CFString const**, __CFData const*) + 57
    12  com.apple.LaunchServices      	0x00007fff532268da FSNodeBookmarkDataCopyName + 114
    13  com.apple.LaunchServices      	0x00007fff532262f5 _LSAliasCompareToNode + 184
    14  com.apple.LaunchServices      	0x00007fff5322611a _LSBundleMatchesNode(LSDatabase*, unsigned int, LSBundleData const*, FSNode*, unsigned long long) + 189
    15  com.apple.LaunchServices      	0x00007fff53225cff _LSBundleFindWithNode + 817
    16  com.apple.LaunchServices      	0x00007fff53227f65 _LSFindOrRegisterBundleNode + 163
    17  com.apple.LaunchServices      	0x00007fff532437cf getAppBundleIdentifierVersionAndCapabilityFlags(_LSOnDemandContext&, FSNode*, unsigned int, NSString* __autoreleasing*, unsigned long long*, unsigned char*, NSError* __autoreleasing*) + 108
    18  com.apple.LaunchServices      	0x00007fff5324343a prepareApplicationCapabilityIsDisabledValue(_LSOnDemandContext&, FSNode*, __CFString const*, unsigned int, __FileCache*, __CFString const*, NSError* __autoreleasing*) + 210
    19  com.apple.LaunchServices      	0x00007fff53243363 prepareApplicationNapIsDisabledValue(_LSOnDemandContext&, FSNode*, __FileCache*, __CFString const*, NSError* __autoreleasing*) + 33
    20  com.apple.LaunchServices      	0x00007fff532105c6 LSPropertyProviderPrepareValues(__CFURL const*, __FileCache*, __CFString const* const*, void const**, long, void const*, __CFError**) + 657
    21  com.apple.CoreServicesInternal	0x00007fff662e80ee prepareValuesForBitmap(__CFURL const*, __FileCache*, _FilePropertyBitmap*, __CFError**) + 360
    22  com.apple.CoreServicesInternal	0x00007fff662e9d3d _FSURLCopyResourcePropertyForKeyInternal(__CFURL const*, __CFString const*, void*, void*, __CFError**, unsigned char) + 214
    23  com.apple.CoreFoundation      	0x00007fff51c3a767 CFURLCopyResourcePropertyForKey + 101
    24  com.apple.CoreFoundation      	0x00007fff51c8d009 ____CFRunLoopSetOptionsReason_block_invoke_5 + 154
    25  libdispatch.dylib             	0x00007fff7e0f55f8 _dispatch_call_block_and_release + 12
    26  libdispatch.dylib             	0x00007fff7e0f663d _dispatch_client_callout + 8
    27  libdispatch.dylib             	0x00007fff7e104654 _dispatch_root_queue_drain + 988
    28  libdispatch.dylib             	0x00007fff7e104b46 _dispatch_worker_thread2 + 90
    29  libsystem_pthread.dylib       	0x00007fff7e3306b3 _pthread_wqthread + 583
    30  libsystem_pthread.dylib       	0x00007fff7e3303fd start_wqthread + 13
    
    Thread 4:
    0   libsystem_pthread.dylib       	0x00007fff7e3303f0 start_wqthread + 0
    
    Thread 5:
    0   libsystem_pthread.dylib       	0x00007fff7e3303f0 start_wqthread + 0
    
    Thread 6:: Chrome_ChildIOThread
    0   libsystem_kernel.dylib        	0x00007fff7e27bf4a write + 10
    1   org.qt-project.Qt.QtWebEngineCore	0x000000010a72c6fd mojo::edk::PlatformChannelWrite(mojo::edk::PlatformHandle, void const*, unsigned long) + 45
    2   org.qt-project.Qt.QtWebEngineCore	0x000000010be12724 mojo::edk::(anonymous namespace)::ChannelPosix::WriteNoLock(mojo::edk::(anonymous namespace)::MessageView) + 260
    3   org.qt-project.Qt.QtWebEngineCore	0x000000010be112e4 mojo::edk::(anonymous namespace)::ChannelPosix::Write(std::__1::unique_ptr<mojo::edk::Channel::Message, std::__1::default_delete<mojo::edk::Channel::Message> >) + 132
    4   org.qt-project.Qt.QtWebEngineCore	0x000000010be213dc mojo::edk::NodeChannel::WriteChannelMessage(std::__1::unique_ptr<mojo::edk::Channel::Message, std::__1::default_delete<mojo::edk::Channel::Message> >) + 204
    5   org.qt-project.Qt.QtWebEngineCore	0x000000010be21bbd mojo::edk::NodeChannel::PortsMessage(std::__1::unique_ptr<mojo::edk::Channel::Message, std::__1::default_delete<mojo::edk::Channel::Message> >) + 29
    6   org.qt-project.Qt.QtWebEngineCore	0x000000010be293a0 mojo::edk::NodeController::SendPeerMessage(mojo::edk::ports::NodeName const&, std::__1::unique_ptr<mojo::edk::ports::Message, std::__1::default_delete<mojo::edk::ports::Message> >) + 448
    7   org.qt-project.Qt.QtWebEngineCore	0x000000010be298f8 mojo::edk::NodeController::ForwardMessage(mojo::edk::ports::NodeName const&, std::__1::unique_ptr<mojo::edk::ports::Message, std::__1::default_delete<mojo::edk::ports::Message> >) + 104
    8   org.qt-project.Qt.QtWebEngineCore	0x000000010a731fe3 mojo::edk::ports::Node::OnObserveProxy(mojo::edk::ports::PortName const&, mojo::edk::ports::ObserveProxyEventData const&) + 515
    9   org.qt-project.Qt.QtWebEngineCore	0x000000010a7319b3 mojo::edk::ports::Node::AcceptMessage(std::__1::unique_ptr<mojo::edk::ports::Message, std::__1::default_delete<mojo::edk::ports::Message> >) + 227
    10  org.qt-project.Qt.QtWebEngineCore	0x000000010be268a0 mojo::edk::NodeController::AcceptIncomingMessages() + 240
    11  org.qt-project.Qt.QtWebEngineCore	0x000000010be2ac1e mojo::edk::NodeController::OnPortsMessage(mojo::edk::ports::NodeName const&, std::__1::unique_ptr<mojo::edk::Channel::Message, std::__1::default_delete<mojo::edk::Channel::Message> >) + 286
    12  org.qt-project.Qt.QtWebEngineCore	0x000000010be22f7b mojo::edk::NodeChannel::OnChannelMessage(void const*, unsigned long, std::__1::unique_ptr<std::__1::vector<mojo::edk::PlatformHandle, std::__1::allocator<mojo::edk::PlatformHandle> >, mojo::edk::PlatformHandleVectorDeleter>) + 2203
    13  org.qt-project.Qt.QtWebEngineCore	0x000000010be10b82 mojo::edk::Channel::OnReadComplete(unsigned long, unsigned long*) + 466
    14  org.qt-project.Qt.QtWebEngineCore	0x000000010be11ec1 mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) + 337
    15  org.qt-project.Qt.QtWebEngineCore	0x000000010aac268e base::MessagePumpLibevent::OnLibeventNotification(int, short, void*) + 190
    16  org.qt-project.Qt.QtWebEngineCore	0x000000010afce8e5 event_base_loop + 1269
    17  org.qt-project.Qt.QtWebEngineCore	0x000000010aac297f base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) + 463
    18  org.qt-project.Qt.QtWebEngineCore	0x000000010aac00ee base::MessageLoop::RunHandler() + 94
    19  org.qt-project.Qt.QtWebEngineCore	0x000000010aae4511 base::RunLoop::Run() + 113
    20  org.qt-project.Qt.QtWebEngineCore	0x000000010ab1834b base::Thread::ThreadMain() + 299
    21  org.qt-project.Qt.QtWebEngineCore	0x000000010ab11647 base::(anonymous namespace)::ThreadFunc(void*) + 87
    22  libsystem_pthread.dylib       	0x00007fff7e3312eb _pthread_body + 126
    23  libsystem_pthread.dylib       	0x00007fff7e334249 _pthread_start + 66
    24  libsystem_pthread.dylib       	0x00007fff7e33040d thread_start + 13
    
    Thread 0 crashed with X86 Thread State (64-bit):
      rax: 0x0000000000000000  rbx: 0x0000000000000000  rcx: 0x0000000000000000  rdx: 0x000000000000000a
      rdi: 0x00007f860e819800  rsi: 0x0000000000000000  rbp: 0x00007ffee5d69240  rsp: 0x00007ffee5d69220
       r8: 0x0000000000000000   r9: 0x0000000000008018  r10: 0x0000000000000000  r11: 0x0000000000000158
      r12: 0x000000010e700cc9  r13: 0x00007ffee5d69810  r14: 0x0000000000000001  r15: 0x00007f860e819800
      rip: 0x000000010c32fdbe  rfl: 0x0000000000010206  cr2: 0x0000000000000010
      
    Logical CPU:     3
    Error Code:      0x00000004
    Trap Number:     14
    
    
    Binary Images:
           0x109e95000 -        0x109e99ff3 +org.qt-project.Qt.QtWebEngineProcess (0) <46F5E17A-1688-365C-9842-F245421974A8> /MyFolder/*/MyApp.app/Contents/Frameworks/QtWebEngineCore.framework/Helpers/QtWebEngineProcess.app/Contents/MacOS/QtWebEngineProcess
           0x109ea4000 -        0x10ee9af27 +org.qt-project.Qt.QtWebEngineCore (5.9 - 5.9.3) <9E7F07AE-13D8-3915-8BB5-CE52EA56FA0F> /MyFolder/*/MyApp.app/Contents/Frameworks/QtWebEngineCore.framework/Versions/5/QtWebEngineCore
    ...
    
    


  • Note: the problem goes away if I disable SIP (System Integrity Protection) as described here.



  • Chrome has split the helper process into three parts with the following rights:

    plugin:
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    renderer:
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    gpu:
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>

    QtWebEngineProcess probably need them all, though the last one might be a superset of allow-jit.

    And that is on top of what you need allow the host process

    Chrome has this for the main app:
    <key>com.apple.application-identifier</key>
    <string>${CHROMIUM_TEAM_ID}.${CHROMIUM_BUNDLE_ID}</string>
    <key>keychain-access-groups</key>
    <array>
    <string>${CHROMIUM_TEAM_ID}.${CHROMIUM_BUNDLE_ID}.webauthn</string>
    </array>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.bluetooth</key>
    <true/>
    <key>com.apple.security.device.camera</key>
    <true/>
    <key>com.apple.security.device.print</key>
    <true/>
    <key>com.apple.security.device.usb</key>
    <true/>

    We don't access bluetooth, use webauthn or webusb, so those might not be needed. Audio-input and the camera are probably accessed though.



  • @kdg82 I have the same problem, if I open hardened runtime for my app, the QtWebEngineProcess crashed. Hope the official answer.


Log in to reply