Igalia / wolvic-chromium

The official GitHub mirror of the Chromium source
https://chromium.googlesource.com/chromium/src/
BSD 3-Clause "New" or "Revised" License
11 stars 6 forks source link

Crash in VideoCaptureFactory_getDeviceName #63

Closed svillar closed 7 months ago

svillar commented 8 months ago

I got this while trying to open Atomic City

This is the stacktrace, again related to JNI

Stack Trace:
  RELADDR   FUNCTION                                                                          FILE:LINE
  v------>  base::ImmediateCrash()                                                            ../../base/immediate_crash.h:146:3
  0000000004c1462c  logging::LogMessage::~LogMessage()                                                ../../base/logging.cc:959:7
  0000000004c96188  base::android::CheckException(_JNIEnv*)                                           ../../base/android/jni_android.cc:289:3
  v------>  jni_generator::CheckException(_JNIEnv*)                                           ../../base/android/jni_generator/jni_generator_helper.h:53:3
  0000000002ecbae8  jni_generator::JniJavaCallContextChecked::~JniJavaCallContextChecked()            ../../base/android/jni_generator/jni_generator_helper.h:118:5
  v------>  media::Java_VideoCaptureFactory_getDeviceName(_JNIEnv*, int)                      gen/jni_headers/media/capture/video/android/capture_jni_headers/VideoCaptureFactory_jni.h:220:1
  0000000003663d59  media::VideoCaptureDeviceFactoryAndroid::GetDevicesInfo(base::OnceCallback<void (std::__Cr::vector<media::VideoCaptureDeviceInfo, std::__Cr::allocator<media::VideoCaptureDeviceInfo>>)>)  ../../media/capture/video/android/video_capture_device_factory_android.cc:74:9
  00000000058c5e81  media::VideoCaptureSystemImpl::GetDeviceInfosAsync(base::OnceCallback<void (std::__Cr::vector<media::VideoCaptureDeviceInfo, std::__Cr::allocator<media::VideoCaptureDeviceInfo>> const&)>)  ../../media/capture/video/video_capture_system_impl.cc:97:15
  0000000003eb4f09  video_capture::DeviceFactoryImpl::GetDeviceInfos(base::OnceCallback<void (std::__Cr::vector<media::VideoCaptureDeviceInfo, std::__Cr::allocator<media::VideoCaptureDeviceInfo>> const&)>)  ../../services/video_capture/device_factory_impl.cc:93:20
  0000000003ebb7bd  video_capture::VirtualDeviceEnabledDeviceFactory::GetDeviceInfos(base::OnceCallback<void (std::__Cr::vector<media::VideoCaptureDeviceInfo, std::__Cr::allocator<media::VideoCaptureDeviceInfo>> const&)>)  ../../services/video_capture/virtual_device_enabled_device_factory.cc:135:20
  0000000003ebb004  video_capture::VideoSourceProviderImpl::GetSourceInfos(base::OnceCallback<void (std::__Cr::vector<media::VideoCaptureDeviceInfo, std::__Cr::allocator<media::VideoCaptureDeviceInfo>> const&)>)  ../../services/video_capture/video_source_provider_impl.cc:34:20
  00000000037df929  video_capture::mojom::VideoSourceProviderStubDispatch::AcceptWithResponder(video_capture::mojom::VideoSourceProvider*, mojo::Message*, std::__Cr::unique_ptr<mojo::MessageReceiverWithStatus, std::__Cr::default_delete<mojo::MessageReceiverWithStatus>>)  gen/services/video_capture/public/mojom/video_source_provider.mojom.cc:1033:13
  v------>  mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*)             ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:970:56
  0000000004ebaa55  mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*)  ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:363:18
  0000000004ebe178  mojo::MessageDispatcher::Accept(mojo::Message*)                                   ../../mojo/public/cpp/bindings/lib/message_dispatcher.cc:48:24
  0000000004ebb92d  mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*)              ../../mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:701:20
  0000000004ec018a  mojo::internal::MultiplexRouter::ProcessIncomingMessage(mojo::internal::MultiplexRouter::MessageWrapper*, mojo::internal::MultiplexRouter::ClientCallBehavior, base::SequencedTaskRunner*)  ../../mojo/public/cpp/bindings/lib/multiplex_router.cc:1096:42
  0000000004ebfe9d  mojo::internal::MultiplexRouter::Accept(mojo::Message*)                           ../../mojo/public/cpp/bindings/lib/multiplex_router.cc:710:7
  0000000004ebe103  mojo::MessageDispatcher::Accept(mojo::Message*)                                   ../../mojo/public/cpp/bindings/lib/message_dispatcher.cc:43:19
  0000000004eb80be  mojo::Connector::DispatchMessage(mojo::ScopedHandleBase<mojo::MessageHandle>)     ../../mojo/public/cpp/bindings/lib/connector.cc:561:49
  0000000004eb84f5  mojo::Connector::ReadAllAvailableMessages()                                       ../../mojo/public/cpp/bindings/lib/connector.cc:618:14
  0000000004eb83ef  mojo::Connector::OnWatcherHandleReady(char const*, unsigned int)                  ../../mojo/public/cpp/bindings/lib/connector.cc:417:3
  v------>  void base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(char const*, unsigned int), base::internal::UnretainedWrapper<mojo::Connector, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>, base::internal::UnretainedWrapper<char const, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>>, void (unsigned int)>::RunImpl<void (mojo::Connector::* const&)(char const*, unsigned int), std::__Cr::tuple<base::internal::UnretainedWrapper<mojo::Connector, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>, base::internal::UnretainedWrapper<char const, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>> const&, 0ul, 1ul>(void (mojo::Connector::* const&)(char const*, unsigned int), std::__Cr::tuple<base::internal::UnretainedWrapper<mojo::Connector, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>, base::internal::UnretainedWrapper<char const, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>> const&, std::__Cr::integer_sequence<unsigned long, 0ul, 1ul>, unsigned int&&)  ../../base/functional/bind_internal.h:968:12
  0000000004eb8c1f  base::internal::Invoker<base::internal::BindState<void (network::HostResolver::*)(network::ResolveHostRequest*, int), base::internal::UnretainedWrapper<network::HostResolver, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>, base::internal::UnretainedWrapper<network::ResolveHostRequest, base::unretained_traits::MayNotDangle, (base::RawPtrTraits)0>>, void (int)>::RunOnce(base::internal::BindStateBase*, int)  ../../base/functional/bind_internal.h:932:12
  0000000003423e9b  base::RepeatingCallback<void (blink::RunState)>::Run(blink::RunState) const &     ../../base/functional/callback.h:333:12
  v------>  base::RepeatingCallback<void (unsigned int, mojo::HandleSignalsState const&)>::Run(unsigned int, mojo::HandleSignalsState const&) const &  ../../base/functional/callback.h:333:12
  0000000004eccbe6  mojo::SimpleWatcher::OnHandleReady(int, unsigned int, mojo::HandleSignalsState const&)  ../../mojo/public/cpp/system/simple_watcher.cc:278:14
  v------>  base::OnceCallback<void ()>::Run() &&                                             ../../base/functional/callback.h:152:12
  0000000004c4a401  base::TaskAnnotator::RunTaskImpl(base::PendingTask&)                              ../../base/task/common/task_annotator.cc:201:34
  v------>  void base::TaskAnnotator::RunTask<base::internal::TaskTracker::RunTaskImpl(base::internal::Task&, base::TaskTraits const&, base::internal::TaskSource*, base::SequenceToken const&)::$_0>(perfetto::StaticString, base::PendingTask&, base::internal::TaskTracker::RunTaskImpl(base::internal::Task&, base::TaskTraits const&, base::internal::TaskSource*, base::SequenceToken const&)::$_0&&)  ../../base/task/common/task_annotator.h:89:5
  0000000004c6c5bc  base::internal::TaskTracker::RunTaskImpl(base::internal::Task&, base::TaskTraits const&, base::internal::TaskSource*, base::SequenceToken const&)  ../../base/task/thread_pool/task_tracker.cc:643:19
  0000000004c6c61f  base::internal::TaskTracker::RunSkipOnShutdown(base::internal::Task&, base::TaskTraits const&, base::internal::TaskSource*, base::SequenceToken const&)  ../../base/task/thread_pool/task_tracker.cc:628:3
  v------>  base::internal::TaskTracker::RunTaskWithShutdownBehavior(base::internal::Task&, base::TaskTraits const&, base::internal::TaskSource*, base::SequenceToken const&)  ../../base/task/thread_pool/task_tracker.cc:658:7
  0000000004c6c1f9  base::internal::TaskTracker::RunTask(base::internal::Task, base::internal::TaskSource*, base::TaskTraits const&)  ../../base/task/thread_pool/task_tracker.cc:485:5
  0000000004c6beef  base::internal::TaskTracker::RunAndPopNextTask(base::internal::RegisteredTaskSource)  ../../base/task/thread_pool/task_tracker.cc:400:5
  0000000004c7245c  base::internal::WorkerThread::RunWorker()                                         ../../base/task/thread_pool/worker_thread.cc:483:34
  0000000004c72265  base::internal::WorkerThread::RunDedicatedWorker()                                ../../base/task/thread_pool/worker_thread.cc:379:3
  0000000004c72191  base::internal::WorkerThread::ThreadMain()                                        ../../base/task/thread_pool/worker_thread.cc:345:7
  0000000004c86bbd  base::(anonymous namespace)::ThreadFunc(void*)                                    ../../base/threading/platform_thread_posix.cc:101:13
svillar commented 8 months ago

After checking upstream reports like this one I think the problem might be caused by uncatched Java exceptions instead of something related to JNI

For example I noticed that before this crash the logs had this exception

java.lang.SecurityException: getCameraCharacteristics:582: caller with invalid privileges (calling PID 12444, UID 10113) trying to access camera 2 
17:15:59.779  W     at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:793)
17:15:59.779  W     at android.hardware.camera2.CameraManager.getCameraCharacteristics(CameraManager.java:327)
17:15:59.779  W     at org.chromium.media.VideoCaptureCamera2.getCameraCharacteristics(VideoCaptureCamera2.java:1045)
17:15:59.779  W     at org.chromium.media.VideoCaptureCamera2.isLegacyDevice(VideoCaptureCamera2.java:1338)
17:15:59.779  W     at org.chromium.media.VideoCaptureFactory.isLegacyOrDeprecatedDevice(VideoCaptureFactory.java:35)
17:15:59.779  W     at org.chromium.media.VideoCaptureFactory.getDeviceName(VideoCaptureFactory.java:86)
svillar commented 8 months ago

Reported upstream

svillar commented 8 months ago

And the patch