New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 856406 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Jul 3
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 1
Type: Bug



Sign in to add a comment

Tether makes new accounts crash on initial signin if kMultiDeviceApi flag is enabled

Project Member Reported by hansberry@chromium.org, Jun 26 2018

Issue description

repro: sign in to an existing account with a Tether host. Chrome will immediately crash when Tether tries to do a host scan.

This is the last few lines of /home/chronos/user/log/chrome before the crash:

[17224:17224:0625/174909.324763:INFO:tether_service.cc(202)] Starting up TetherComponent.
[17224:17224:0625/174909.324906:INFO:host_scanner_impl.cc(101)] Starting Tether host scan. 2 potential host(s) included in the search.

GDB stack trace:

mojo::internal::Serializer<chromeos::device_sync::mojom::RemoteDeviceDataView, cryptauth::RemoteDevice const>::Serialize(cryptauth::RemoteDevice const&, mojo::internal::Buffer*, chromeos::device_sync::mojom::internal::RemoteDevice_Data::BufferWriter*, mojo::internal::SerializationContext*) ()
    at /usr/local/google/home/hansberry/chromium/.cros_cache/chrome-sdk/tarballs/eve+10779.0.0+target_toolchain/usr/bin/../include/c++/v1/string:1226
#0  mojo::internal::Serializer<chromeos::device_sync::mojom::RemoteDeviceDataView, cryptauth::RemoteDevice const>::Serialize(cryptauth::RemoteDevice const&, mojo::internal::Buffer*, chromeos::device_sync::mojom::internal::RemoteDevice_Data::BufferWriter*, mojo::internal::SerializationContext*) ()
    at /usr/local/google/home/hansberry/chromium/.cros_cache/chrome-sdk/tarballs/eve+10779.0.0+target_toolchain/usr/bin/../include/c++/v1/string:1226
#1  0x00005a6ab9dfe8cd in chromeos::secure_channel::mojom::SecureChannelProxy::ListenForConnectionFromDevice(cryptauth::RemoteDevice const&, cryptauth::RemoteDevice const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>) ()
    at ../../mojo/public/cpp/bindings/lib/serialization_forward.h:42
warning: (Internal error: pc 0x5a6ab9dfe8cc in read in CU, but not in symtab.)
warning: Could not find DWO CU obj/chromeos/services/secure_channel/public/cpp/client/client/secure_channel_client_impl.dwo(0x403c1f87d183be80) referenced by CU at offset 0x3fee9 [in module /opt/google/chrome/chrome]
#2  0x00005a6ab9dfc8e7 in chromeos::secure_channel::SecureChannelClientImpl::PerformListenForConnectionFromDevice(cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>) ()
    at ../../chromeos/services/secure_channel/public/cpp/client/secure_channel_client_impl.cc:116
#3  0x00005a6ab9dfcbc5 in void base::internal::FunctorTraits<void (chromeos::secure_channel::SecureChannelClientImpl::*)(cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>), void>::Invoke<void (chromeos::secure_channel::SecureChannelClientImpl::*)(cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>), base::WeakPtr<chromeos::secure_channel::SecureChannelClientImpl>, cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate> >(void (chromeos::secure_channel::SecureChannelClientImpl::*)(cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>), base::WeakPtr<chromeos::secure_channel::SecureChannelClientImpl>&&, cryptauth::RemoteDeviceRef&&, cryptauth::RemoteDeviceRef&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, chromeos::secure_channel::ConnectionPriority&&, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>&&) () at ../../base/bind_internal.h:507
#4  0x00005a6ab9dfcaea in base::internal::Invoker<base::internal::BindState<void (chromeos::secure_channel::SecureChannelClientImpl::*)(cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate>), base::WeakPtr<chromeos::secure_channel::SecureChannelClientImpl>, cryptauth::RemoteDeviceRef, cryptauth::RemoteDeviceRef, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, chromeos::secure_channel::ConnectionPriority, mojo::InterfacePtr<chromeos::secure_channel::mojom::ConnectionDelegate> >, void ()>::RunOnce(base::internal::BindStateBase*) () at ../../base/bind_internal.h:627
#5  0x00005a6abaf64d29 in base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) () at ../../base/callback.h:99
#6  0x00005a6abaf7ac97 in base::MessageLoop::RunTask(base::PendingTask*) () at ../../base/message_loop/message_loop.cc:319
#7  0x00005a6abaf7b187 in base::MessageLoop::DoWork() () at ../../base/message_loop/message_loop.cc:329
#8  0x00005a6abaff43c9 in base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) () at ../../base/message_loop/message_pump_libevent.cc:210

I initially suspected this was due to DeviceSyncClient not having devices synced yet, but that doesn't seem to be the issue because the logs say "2 potential host(s) included in the search". I'll keep investigating.


 
This may be due to the local device not completing enrollment yet, causing DeviceSyncClient::GetLocalDeviceMetadata to return an empty Optional. Still investigating.
Your comment #1 seems like the likely explanation to me, Ryan.
Project Member

Comment 3 by bugdroid1@chromium.org, Jul 3

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c553b5e2af9d497bf17b8ffcef675b1cec227255

commit c553b5e2af9d497bf17b8ffcef675b1cec227255
Author: Ryan Hansberry <hansberry@chromium.org>
Date: Tue Jul 03 18:47:04 2018

[CrOS Multidevice] Fix crash in Tether.

This issue manifested as all new account creations on Chrome OS crashing.
It was caused by the local device metadata being returned by DeviceSyncClient
not yet being initialized.

DeviceSyncClient now internally keeps track of whether it is "ready", that is,
whether its local device metadata and synced devices are available yet. Only
once it has loaded both sets of data will it mark itself as "ready", and inform
clients appropriately. This change also ensures that DeviceSyncClient's Observer
callbacks, OnEnrollmentFinished() and OnNewDevicesSynced(), are not called until
DeviceSyncClient is ready.

R=jhawkins@chromium.org, khorimoto@chromium.org

Bug:  856406 
Change-Id: Idb6fdf123d4d90883f67bb1e88a617004926207e
Reviewed-on: https://chromium-review.googlesource.com/1121351
Reviewed-by: James Hawkins <jhawkins@chromium.org>
Reviewed-by: Kyle Horimoto <khorimoto@chromium.org>
Commit-Queue: Ryan Hansberry <hansberry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572309}
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chrome/browser/chromeos/tether/tether_service.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chrome/browser/chromeos/tether/tether_service.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chrome/browser/chromeos/tether/tether_service_unittest.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/device_sync_client.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/device_sync_client.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/device_sync_client_impl.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/device_sync_client_impl.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/device_sync_client_impl_unittest.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/device_sync/public/cpp/fake_device_sync_client.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/multidevice_setup/multidevice_setup_initializer.cc
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/multidevice_setup/multidevice_setup_initializer.h
[modify] https://crrev.com/c553b5e2af9d497bf17b8ffcef675b1cec227255/chromeos/services/multidevice_setup/multidevice_setup_service_unittest.cc

Status: Fixed (was: Started)

Sign in to add a comment