FATAL:os_crypt_mac.mm(145)] Check failed: !raw_key.empty(). |
|||
Issue descriptionChrome Version: ToT f16a2137fd554484d9c3f8e44ec143b90c71e8d5 OS: Mac 10.13 What steps will reproduce the problem? (1) Build local Chromium and launch it. (2) Click "Deny" in dialog box "Chromium wants to use your confidential information stored in "Chromium Safe Storage" in your keychain. What is the expected result? No DCHECK should fire. What happens instead? DCHECKs fire - lots with the following stack trace: [59323:18947:1126/094044.526706:FATAL:os_crypt_mac.mm(145)] Check failed: !raw_key.empty(). 0 libbase.dylib 0x00000001116edd83 base::debug::StackTrace::StackTrace(unsigned long) + 83 1 libbase.dylib 0x00000001116ede3d base::debug::StackTrace::StackTrace(unsigned long) + 29 2 libbase.dylib 0x00000001113dcfaa base::debug::StackTrace::StackTrace() + 26 3 libbase.dylib 0x000000011142481e logging::LogMessage::~LogMessage() + 142 4 libbase.dylib 0x0000000111423615 logging::LogMessage::~LogMessage() + 21 5 libos_crypt.dylib 0x00000001696ec7e0 OSCrypt::SetRawEncryptionKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 224 6 libnetwork_service.dylib 0x000000015ffd71b9 network::NetworkService::SetEncryptionKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 25 7 libnetwork_service.dylib 0x00000001602efb59 network::mojom::NetworkServiceStubDispatch::Accept(network::mojom::NetworkService*, mojo::Message*) + 12265 8 libnetwork_service.dylib 0x000000015ffdb9e3 network::mojom::NetworkServiceStub<mojo::RawPtrImplRefTraits<network::mojom::NetworkService> >::Accept(mojo::Message*) + 83 9 libbindings.dylib 0x00000001123c518a mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) + 1530 10 libbindings.dylib 0x00000001123c4b81 mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*) + 33 11 libbindings.dylib 0x00000001123c317c mojo::FilterChain::Accept(mojo::Message*) + 412 12 libbindings.dylib 0x00000001123c7896 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) + 230 13 libbindings.dylib 0x00000001123d86fc mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*) + 1564 14 libbindings.dylib 0x00000001123d7cbf mojo::internal::MultiplexRouter::Accept(mojo::Message*) + 639 15 libbindings.dylib 0x00000001123c317c mojo::FilterChain::Accept(mojo::Message*) + 412 16 libbindings.dylib 0x00000001123aded0 mojo::Connector::ReadSingleMessage(unsigned int*) + 1120 17 libbindings.dylib 0x00000001123af191 mojo::Connector::ReadAllAvailableMessages() + 129 18 libbindings.dylib 0x00000001123aeef6 mojo::Connector::OnHandleReadyInternal(unsigned int) + 262 19 libbindings.dylib 0x00000001123aeddb mojo::Connector::OnWatcherHandleReady(unsigned int) + 27 20 libbindings.dylib 0x00000001123b3864 void base::internal::FunctorTraits<void (mojo::Connector::*)(unsigned int), void>::Invoke<void (mojo::Connector::*)(unsigned int), mojo::Connector*, unsigned int>(void (mojo::Connector::*)(unsigned int), mojo::Connector*&&, unsigned int&&) + 148 21 libbindings.dylib 0x00000001123b3756 void base::internal::InvokeHelper<false, void>::MakeItSo<void (mojo::Connector::* const&)(unsigned int), mojo::Connector*, unsigned int>(void (mojo::Connector::* const&&&)(unsigned int), mojo::Connector*&&, unsigned int&&) + 102 22 libbindings.dylib 0x00000001123b36c5 void base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(unsigned int), base::internal::UnretainedWrapper<mojo::Connector> >, void (unsigned int)>::RunImpl<void (mojo::Connector::* const&)(unsigned int), std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > const&, 0ul>(void (mojo::Connector::* const&&&)(unsigned int), std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > const&&&, std::__1::integer_sequence<unsigned long, 0ul>, unsigned int&&) + 101 23 libbindings.dylib 0x00000001123b35c9 base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(unsigned int), base::internal::UnretainedWrapper<mojo::Connector> >, void (unsigned int)>::Run(base::internal::BindStateBase*, unsigned int) + 89 24 libbindings.dylib 0x00000001123a7b5b base::RepeatingCallback<void (unsigned int)>::Run(unsigned int) const & + 91 25 libbindings.dylib 0x00000001123b1ddf mojo::SimpleWatcher::DiscardReadyState(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&) + 31 26 libbindings.dylib 0x00000001123b215c void base::internal::FunctorTraits<void (*)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), void>::Invoke<void (* const&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&>(void (* const&&&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> const&&&, unsigned int&&, mojo::HandleSignalsState const&&&) + 92 27 libbindings.dylib 0x00000001123b20ac void base::internal::InvokeHelper<false, void>::MakeItSo<void (* const&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&>(void (* const&&&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> const&&&, unsigned int&&, mojo::HandleSignalsState const&&&) + 92 28 libbindings.dylib 0x00000001123b202c void base::internal::Invoker<base::internal::BindState<void (*)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> >, void (unsigned int, mojo::HandleSignalsState const&)>::RunImpl<void (* const&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::RepeatingCallback<void (unsigned int)> > const&, 0ul>(void (* const&&&)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), std::__1::tuple<base::RepeatingCallback<void (unsigned int)> > const&&&, std::__1::integer_sequence<unsigned long, 0ul>, unsigned int&&, mojo::HandleSignalsState const&) + 108 29 libbindings.dylib 0x00000001123b1efb base::internal::Invoker<base::internal::BindState<void (*)(base::RepeatingCallback<void (unsigned int)> const&, unsigned int, mojo::HandleSignalsState const&), base::RepeatingCallback<void (unsigned int)> >, void (unsigned int, mojo::HandleSignalsState const&)>::Run(base::internal::BindStateBase*, unsigned int, mojo::HandleSignalsState const&) + 107 30 libmojo_public_system_cpp.dylib 0x0000000112638117 base::RepeatingCallback<void (unsigned int, mojo::HandleSignalsState const&)>::Run(unsigned int, mojo::HandleSignalsState const&) const + 119 31 libmojo_public_system_cpp.dylib 0x0000000112637e6f mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&) + 447 32 libmojo_public_system_cpp.dylib 0x000000011263833d mojo::SimpleWatcher::Context::Notify(unsigned int, MojoHandleSignalsState, unsigned int) + 333 33 libmojo_public_system_cpp.dylib 0x000000011263654d mojo::SimpleWatcher::Context::CallNotify(MojoTrapEvent const*) + 77 34 libmojo_core_embedder_internal.dylib 0x00000001aa0675d8 mojo::core::WatcherDispatcher::InvokeWatchCallback(unsigned long, unsigned int, mojo::core::HandleSignalsState const&, unsigned int) + 216 35 libmojo_core_embedder_internal.dylib 0x00000001aa0669ac mojo::core::Watch::InvokeCallback(unsigned int, mojo::core::HandleSignalsState const&, unsigned int) + 156 36 libmojo_core_embedder_internal.dylib 0x00000001aa058d25 mojo::core::RequestContext::~RequestContext() + 597 37 libmojo_core_embedder_internal.dylib 0x00000001aa059145 mojo::core::RequestContext::~RequestContext() + 21 38 libmojo_core_embedder_internal.dylib 0x00000001aa02c31c mojo::core::NodeChannel::OnChannelMessage(void const*, unsigned long, std::__1::vector<mojo::PlatformHandle, std::__1::allocator<mojo::PlatformHandle> >) + 5020 39 libmojo_core_embedder_internal.dylib 0x00000001a9ff2223 mojo::core::Channel::OnReadComplete(unsigned long, unsigned long*) + 2035 40 libmojo_core_embedder_internal.dylib 0x00000001aa07c6fe mojo::core::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) + 1262 41 libbase.dylib 0x000000011173837e base::MessagePumpLibevent::FdWatchController::OnFileCanReadWithoutBlocking(int, base::MessagePumpLibevent*) + 62 42 libbase.dylib 0x000000011173973d base::MessagePumpLibevent::OnLibeventNotification(int, short, void*) + 685 43 libbase.dylib 0x000000011173cf3d event_process_active + 365 44 libbase.dylib 0x000000011173c4a4 event_base_loop + 468 45 libbase.dylib 0x00000001117399ba base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) + 490 46 libbase.dylib 0x0000000111467b70 base::MessageLoopImpl::Run(bool) + 512 47 libbase.dylib 0x0000000111516ccd base::RunLoop::Run() + 525 48 libbase.dylib 0x000000011163e2c9 base::Thread::Run(base::RunLoop*) + 393 49 libbase.dylib 0x000000011163ea43 base::Thread::ThreadMain() + 1107 50 libbase.dylib 0x00000001117142b0 base::(anonymous namespace)::ThreadFunc(void*) + 192 51 libsystem_pthread.dylib 0x00007fff5ff6c661 _pthread_body + 340 52 libsystem_pthread.dylib 0x00007fff5ff6c50d _pthread_body + 0 53 libsystem_pthread.dylib 0x00007fff5ff6bbf9 thread_start + 13 Assigning to first person in components/os_crypt/OWNERS. Per our coding guide: A DCHECK() means “this condition must always be true”, not “this condition is normally true, but perhaps not in exceptional cases.” https://chromium.googlesource.com/chromium/src/+/master/styleguide/c++/c++.md
,
Nov 26
I denied access in the dialog. So I assume it's empty because it couldn't get it from the entry.
,
Nov 26
The password in keychain for that is not an empty string.
,
Nov 26
Thanks, That explains it When the network process gets the raw key, it is explicitly allowed to be empty (in case of a failed lookup). It therefore should not expect it to not be empty on the other side. Fix coming up
,
Nov 26
,
Nov 27
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/e5336934f6b0cf4523ff2e7ac21163dd6be852a5 commit e5336934f6b0cf4523ff2e7ac21163dd6be852a5 Author: Christos Froussios <cfroussios@chromium.org> Date: Tue Nov 27 19:28:25 2018 [OSCrypt] Remove DCHECK on key not being empty on mac Subprocesses set their encryption key by getting it from the browser with GetRawEncryptionKey and setting it locally with SetRawEncryptionKey Since GetRawEncryptionKey may return an empty string (e.g. because the lookup into Keychain failed), SetRawEncryptionKey should not expect that the key is never empty. Bug: 908431 Change-Id: Id9eece1bdf4492778c18178efc97380b800f5034 Reviewed-on: https://chromium-review.googlesource.com/c/1350915 Commit-Queue: Christos Froussios <cfroussios@chromium.org> Reviewed-by: Chris Mumford <cmumford@chromium.org> Cr-Commit-Position: refs/heads/master@{#611249} [modify] https://crrev.com/e5336934f6b0cf4523ff2e7ac21163dd6be852a5/components/os_crypt/os_crypt_mac.mm
,
Nov 28
|
|||
►
Sign in to add a comment |
|||
Comment 1 by cfroussios@google.com
, Nov 26