New issue
Advanced search Search tips

Issue 840744 link

Starred by 1 user

Issue metadata

Status: Duplicate
Owner:
Closed: May 2018
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug

Blocking:
issue 840679



Sign in to add a comment

Linux shutdown hang due to blocked libsecret tasks

Project Member Reported by w...@chromium.org, May 8 2018

Issue description

Linux (reports dbe2361c00298ca9, 0a33f48b5a21a443, 91389545b53ad328): These all have SchedulerWorker threads "stuck" in libsecret keyring unlock tasks.

Example stack:
0x00007f52a289674d	(libc-2.23.so + 0x000fb74d )	__poll
0x00007f52a65ea38b	(libglib-2.0.so.0.4800.2 + 0x0004a38b )	
0x00007f52a65ea711	(libglib-2.0.so.0.4800.2 + 0x0004a711 )	
0x00007f527c3ec531	(libsecret-1.so.0.0.0 + 0x00018531 )	
0x00007f527c3ec874	(libsecret-1.so.0.0.0 + 0x00018874 )	
0x000055a3ccbcac27	(chrome -libsecret_util_linux.cc:78 )	<name omitted>
0x000055a3ccbca17b	(chrome -key_storage_libsecret.cc:79 )	KeyStorageLibsecret::GetKeyImpl()
0x000055a3ccbc9747	(chrome -key_storage_linux.cc:104 )	KeyStorageLinux::WaitForInitOnTaskRunner()
0x000055a3ccbc96d8	(chrome -memory:2286 )	KeyStorageLinux::CreateService(os_crypt::Config const&)
0x00007f5272c34fe8	(Cookies + 0x00007fe8 )	
0x000055a3ccbc995e	(chrome -key_storage_linux.cc:130 )	KeyStorageLinux::GetKey()
0x000055a3cf8929fb	(chrome -tcmalloc.cc )	tc_malloc
0x000055a3ccbc91e2	(chrome -os_crypt_linux.cc:100 )	(anonymous namespace)::GetPasswordV11()
0x000055a3ccbc8928	(chrome -os_crypt_linux.cc:118 )	OSCrypt::DecryptString(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*)
0x00007f52a86c64c8	(libpthread-2.23.so + 0x000104c8 )	__write_nocancel
0x000055a3cb8dc46f	(chrome -message_pump_libevent.cc:271 )	base::MessagePumpLibevent::ScheduleWork()
0x000055a3cb8d9f26	(chrome -incoming_task_queue.cc:86 )	base::internal::IncomingTaskQueue::AddToIncomingQueue(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta, base::Nestable)
0x000055a3ccbd3da2	(chrome -sqlite_persistent_cookie_store.cc:108 )	net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cac16367	(chrome -web_request_api.cc:1918 )	extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*)
0x000055a3cab82461	(chrome -rules_cache_delegate.cc:133 )	extensions::RulesCacheDelegate::CheckIfReady()
0x000055a3cab81e94	(chrome -rules_cache_delegate.cc:94 )	extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*)
0x000055a3cf8928ff	(chrome -malloc_hook-inl.h:313 )	sbrk
0x000055a3cb8db3a8	(chrome -message_loop_task_runner.cc:31 )	base::internal::MessageLoopTaskRunner::PostDelayedTask(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta)
0x000055a3ca55d9be	(chrome -browser_thread_impl.cc:289 )	content::BrowserThread::PostDelayedTask(content::BrowserThread::ID, base::Location const&, base::OnceCallback<void ()>, base::TimeDelta)
0x000055a3ca55ddd0	(chrome -browser_thread_impl.cc:40 )	content::(anonymous namespace)::BrowserThreadTaskRunner::PostDelayedTask(base::Location const&, base::OnceCallback<void ()>, base::TimeDelta)
0x000055a3ccbd3e63	(chrome -sqlite_persistent_cookie_store.cc:908 )	net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
0x000055a3ccbd3da2	(chrome -sqlite_persistent_cookie_store.cc:108 )	net::SQLitePersistentCookieStore::Backend::LoadCookiesForDomains(std::__1::set<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
0x000055a3cb950100	(chrome -vector:1599 )	base::(anonymous namespace)::ParseVersionNumbers(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<unsigned int, std::__1::allocator<unsigned int> >*)
0x000055a3ccbd3860	(chrome -sqlite_persistent_cookie_store.cc:835 )	net::SQLitePersistentCookieStore::Backend::ChainLoadCookies(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cb8e23e2	(chrome -histogram.cc:233 )	base::Histogram::Factory::Build()
0x000055a3cb8e2b23	(chrome -new:236 )	base::Histogram::FactoryTimeGet(char const*, base::TimeDelta, base::TimeDelta, unsigned int, int)
0x00007ffcb7fdcead	(linux-gate.so + 0x00000ead )	
0x000055a3cb8ec125	(chrome -sample_vector.cc:41 )	base::SampleVectorBase::Accumulate(int, int)
0x000055a3ccbd1b33	(chrome -sqlite_persistent_cookie_store.cc:603 )	net::SQLitePersistentCookieStore::Backend::LoadAndNotifyInBackground(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&, base::Time const&)
0x000055a3cb82516f	(chrome -ssl_error_assistant_component_installer.cc:49 )	(anonymous namespace)::LoadProtoFromDisk(base::FilePath const&)
0x000055a3cb8be107	(chrome -callback.h:95 )	base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cac16367	(chrome -web_request_api.cc:1918 )	extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*)
0x000055a3cab82461	(chrome -rules_cache_delegate.cc:133 )	extensions::RulesCacheDelegate::CheckIfReady()
0x000055a3cab81e94	(chrome -rules_cache_delegate.cc:94 )	extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*)
0x000055a3cb91af03	(chrome -task_tracker.cc:478 )	base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cb8f32ee	(chrome -pending_task.cc:20 )	base::PendingTask::PendingTask(base::PendingTask&&)
0x000055a3cb91b842	(chrome -task_tracker_posix.cc:23 )	base::internal::TaskTrackerPosix::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cac16367	(chrome -web_request_api.cc:1918 )	extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*)
0x000055a3cab82461	(chrome -rules_cache_delegate.cc:133 )	extensions::RulesCacheDelegate::CheckIfReady()
0x000055a3cab81e94	(chrome -rules_cache_delegate.cc:94 )	extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*)
0x000055a3cb91a6fe	(chrome -task_tracker.cc:371 )	base::internal::TaskTracker::RunAndPopNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cac16367	(chrome -web_request_api.cc:1918 )	extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*)
0x000055a3cab82461	(chrome -rules_cache_delegate.cc:133 )	extensions::RulesCacheDelegate::CheckIfReady()
0x000055a3cab81e94	(chrome -rules_cache_delegate.cc:94 )	extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*)
0x000055a3ccbd592a	(chrome -sqlite_persistent_cookie_store.cc:567 )	net::SQLitePersistentCookieStore::Load(base::RepeatingCallback<void (std::__1::vector<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> >, std::__1::allocator<std::__1::unique_ptr<net::CanonicalCookie, std::__1::default_delete<net::CanonicalCookie> > > >)> const&)
0x000055a3cac16367	(chrome -web_request_api.cc:1918 )	extensions::ExtensionWebRequestEventRouter::ProcessDeclarativeRules(void*, extensions::InfoMap const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::WebRequestInfo const*, extensions::RequestStage, net::HttpResponseHeaders const*)
0x000055a3cab82461	(chrome -rules_cache_delegate.cc:133 )	extensions::RulesCacheDelegate::CheckIfReady()
0x000055a3cab81e94	(chrome -rules_cache_delegate.cc:94 )	extensions::RulesCacheDelegate::Init(extensions::RulesRegistry*)
0x000055a3cb917996	(chrome -memory:2286 )	base::internal::SchedulerWorkerPoolImpl::SchedulerWorkerDelegateImpl::GetWork(base::internal::SchedulerWorker*)
0x000055a3cb91587c	(chrome -scheduler_worker.cc:85 )	base::internal::SchedulerWorker::Thread::ThreadMain()
0x000055a3cb951bbd	(chrome + 0x0360cbbd )	operator new(unsigned long)
0x000055a3cb9262fb	(chrome -lock_impl.h:70 )	base::ThreadIdNameManager::RegisterThread(unsigned long, int)
0x000055a3cb923fe2	(chrome -platform_thread_posix.cc:76 )	base::(anonymous namespace)::ThreadFunc(void*)
0x00007f52a86bd6b9	(libpthread-2.23.so + 0x000076b9 )	start_thread
0x00007f52a28a241c	(libc-2.23.so + 0x0010741c )	clone
 

Comment 1 by w...@chromium.org, May 8 2018

Blocking: 840679
Mergedinto: 680096
Status: Duplicate (was: Untriaged)
It looks like the calls to Keyring block, because either it's locked or faulty. The hang is expected. If the user does not react to the system prompt to unlock their keyring, then we cannot proceed safely. We risk that encrypted data may get destroyed.

If a user is asking for a solution, we recommend that they simply unlock their keyring.
When a user is unable to unlock their Keyring for a technical reason, they can run Chrome with --password-store=basic, which will bypass Keyring. It is not recommended unless really necessary, because encrypted data may be destroyed and new data will not be encrypted.

Comment 3 by w...@chromium.org, May 8 2018

Re #2: As noted on the other bug, this specific crash is due to the task blocking shutdown - is there any reason that the browser shouldn't shutdown while one of these tasks is pending?  If not then let's move the task to a non-shutdown-blocking Sequence.

Sign in to add a comment