envoy-mobile icon indicating copy to clipboard operation
envoy-mobile copied to clipboard

is_cleartext_permitted method always crashes

Open Augustyniak opened this issue 3 years ago • 0 comments

The implementation of is_cleartext_permitted method always crashes.

That's because the jcls_AndroidNetworkLibrary variable in https://github.com/envoyproxy/envoy-mobile/blob/6eb67e6cd004665a01a35981b5728450ba6a179c/library/common/jni/android_jni_utility.cc#L23 is NULL.

See failing CI jobs in https://github.com/envoyproxy/envoy-mobile/pull/2431 PR draft.

Screen Shot 2022-07-19 at 3 40 38 PM
* thread #25, name = 'EnvoyMain', stop reason = signal SIGABRT
  * frame #0: 0x0000007cd11fdacc libc.so`abort + 164
    frame #1: 0x0000007a2c2d7bb4 libart.so`art::Runtime::Abort(char const*) + 672
    frame #2: 0x0000007a00e16960 libbase.so`android::base::SetAborter(std::__1::function<void (char const*)>&&)::$_3::__invoke(char const*) + 80
    frame #3: 0x0000007a00e15f90 libbase.so`android::base::LogMessage::~LogMessage() + 368
    frame #4: 0x0000007a2bfd6f50 libart.so`art::JavaVMExt::JniAbort(char const*, char const*) + 2444
    frame #5: 0x0000007a2c18d6e4 libart.so`art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list) + 112
    frame #6: 0x0000007a2c18877c libart.so`art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...) + 144
    frame #7: 0x0000007a2c18c990 libart.so`art::(anonymous namespace)::ScopedCheck::CheckThread(_JNIEnv*) + 444
    frame #8: 0x0000007a2c169b4c libart.so`art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*) + 572
    frame #9: 0x0000007a2c175850 libart.so`art::(anonymous namespace)::CheckJNI::GetMethodIDInternal(char const*, _JNIEnv*, _jclass*, char const*, char const*, bool) + 380
    frame #10: 0x000000799b59c578 libenvoy_jni.so`_JNIEnv::GetStaticMethodID(this=0x0000007af2751eb0, clazz=0x0000000000000000, name="isCleartextTrafficPermitted", sig="(Ljava/lang/String;)Z") at jni.h:735:14
    frame #11: 0x000000799c1d31e4 libenvoy_jni.so`is_cleartext_permitted(hostname=(__data = "api.lyft.comz", __size = 12)) at android_jni_utility.cc:24:53
    frame #12: 0x000000799c1b2bb4 libenvoy_jni.so`Envoy::Http::Client::sendHeaders(this=0x0000007ad276e950, stream=0, headers=envoy_headers @ 0x0000007a13db9610, end_stream=true) at client.cc:487:10
    frame #13: 0x000000799b638e0c libenvoy_jni.so`void send_headers::$_1::operator(this=0x0000007a62a542d8, engine=0x0000007ad2753670)<Envoy::Engine>(Envoy::Engine&) const at main_interface.cc:32:29
    frame #14: 0x000000799b638d68 libenvoy_jni.so`decltype(__f=0x0000007a62a542d8, __args=0x0000007ad2753670)(std::__ndk1::forward<Envoy::Engine&>(fp0))) std::__ndk1::__invoke<send_headers::$_1&, Envoy::Engine&>(send_headers::$_1&, Envoy::Engine&) at type_traits:3501:1
    frame #15: 0x000000799b638cf8 libenvoy_jni.so`void std::__ndk1::__invoke_void_return_wrapper<void>::__call<send_headers::$_1&, Envoy::Engine&>(__args=0x0000007a62a542d8, __args=0x0000007ad2753670) at __functional_base:348:9
    frame #16: 0x000000799b638cac libenvoy_jni.so`std::__ndk1::__function::__alloc_func<send_headers::$_1, std::__ndk1::allocator<send_headers::$_1>, void (Envoy::Engine&)>::operator(this=0x0000007a62a542d8, __arg=0x0000007ad2753670)(Envoy::Engine&) at functional:1540:16
    frame #17: 0x000000799b637bcc libenvoy_jni.so`std::__ndk1::__function::__func<send_headers::$_1, std::__ndk1::allocator<send_headers::$_1>, void (Envoy::Engine&)>::operator(this=0x0000007a62a542d0, __arg=0x0000007ad2753670)(Envoy::Engine&) at functional:1714:12
    frame #18: 0x000000799b630db8 libenvoy_jni.so`std::__ndk1::__function::__value_func<void (Envoy::Engine&)>::operator(this=0x0000007a82777470, __args=0x0000007ad2753670)(Envoy::Engine&) const at functional:1867:16
    frame #19: 0x000000799b630d48 libenvoy_jni.so`std::__ndk1::function<void (Envoy::Engine&)>::operator(this=0x0000007a82777470, __arg=0x0000007ad2753670)(Envoy::Engine&) const at functional:2473:12
    frame #20: 0x000000799b6309b0 libenvoy_jni.so`Envoy::EngineHandle::runOnEngineDispatcher(this=0x0000007a82777460)>)::$_0::operator()() const at engine_handle.cc:8:57
    frame #21: 0x000000799b63096c libenvoy_jni.so`decltype(__f=0x0000007a82777460)>)::$_0&>(fp)()) std::__ndk1::__invoke<Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0&>(Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0&) at type_traits:3501:1
    frame #22: 0x000000799b630920 libenvoy_jni.so`void std::__ndk1::__invoke_void_return_wrapper<void>::__call<Envoy::EngineHandle::runOnEngineDispatcher(__args=0x0000007a82777460)>)::$_0&>(Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0&) at __functional_base:348:9
    frame #23: 0x000000799b6308f8 libenvoy_jni.so`std::__ndk1::__function::__alloc_func<Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0, std::__ndk1::allocator<Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0>, void ()>::operator(this=0x0000007a82777460)() at functional:1540:16
    frame #24: 0x000000799b62f6b4 libenvoy_jni.so`std::__ndk1::__function::__func<Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0, std::__ndk1::allocator<Envoy::EngineHandle::runOnEngineDispatcher(long, std::__ndk1::function<void (Envoy::Engine&)>)::$_0>, void ()>::operator(this=0x0000007a82777450)() at functional:1714:12
    frame #25: 0x000000799b723a20 libenvoy_jni.so`std::__ndk1::__function::__value_func<void ()>::operator(this=0x0000007a727f8930)() const at functional:1867:16
    frame #26: 0x000000799b723720 libenvoy_jni.so`std::__ndk1::function<void ()>::operator(this=0x0000007a727f8930)() const at functional:2473:12
    frame #27: 0x000000799ce35d14 libenvoy_jni.so`Envoy::Event::DispatcherImpl::runPostCallbacks(this=0x0000007b2272a310) at dispatcher_impl.cc:379:5
    frame #28: 0x000000799ce3ed88 libenvoy_jni.so`Envoy::Event::DispatcherImpl::DispatcherImpl(this=0x0000007ac2723218)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3::operator()() const at dispatcher_impl.cc:80:77
    frame #29: 0x000000799ce3ed4c libenvoy_jni.so`decltype(__f=0x0000007ac2723218)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3&>(fp)()) std::__ndk1::__invoke<Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3&>(Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3&) at type_traits:3501:1
    frame #30: 0x000000799ce3ed00 libenvoy_jni.so`void std::__ndk1::__invoke_void_return_wrapper<void>::__call<Envoy::Event::DispatcherImpl::DispatcherImpl(__args=0x0000007ac2723218)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3&>(Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3&) at __functional_base:348:9
    frame #31: 0x000000799ce3ecd8 libenvoy_jni.so`std::__ndk1::__function::__alloc_func<Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3, std::__ndk1::allocator<Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3>, void ()>::operator(this=0x0000007ac2723218)() at functional:1540:16
    frame #32: 0x000000799ce3da1c libenvoy_jni.so`std::__ndk1::__function::__func<Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3, std::__ndk1::allocator<Envoy::Event::DispatcherImpl::DispatcherImpl(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, Envoy::Thread::ThreadFactory&, Envoy::TimeSource&, Envoy::Random::RandomGenerator&, Envoy::Filesystem::Instance&, Envoy::Event::TimeSystem&, std::__ndk1::function<std::__ndk1::unique_ptr<Envoy::Event::ScaledRangeTimerManager, std::__ndk1::default_delete<Envoy::Event::ScaledRangeTimerManager> > (Envoy::Event::Dispatcher&)> const&, std::__ndk1::shared_ptr<Envoy::Buffer::WatermarkFactory> const&)::$_3>, void ()>::operator(this=0x0000007ac2723210)() at functional:1714:12
    frame #33: 0x000000799b723a20 libenvoy_jni.so`std::__ndk1::__function::__value_func<void ()>::operator(this=0x0000007ac2723210)() const at functional:1867:16
    frame #34: 0x000000799b723720 libenvoy_jni.so`std::__ndk1::function<void ()>::operator(this=0x0000007ac2723210)() const at functional:2473:12
    frame #35: 0x000000799d4ed3c4 libenvoy_jni.so`Envoy::Event::SchedulableCallbackImpl::SchedulableCallbackImpl(this=0x000000799d4ed358, (null)=-1, (null)=1, arg=0x0000007ac2723190)>&, std::__ndk1::function<void ()>)::$_0::operator()(int, short, void*) const at schedulable_cb_impl.cc:14:3
    frame #36: 0x000000799d4ed384 libenvoy_jni.so`Envoy::Event::SchedulableCallbackImpl::SchedulableCallbackImpl((null)=-1, (null)=1, arg=0x0000007ac2723190)>&, std::__ndk1::function<void ()>)::$_0::__invoke(int, short, void*) at schedulable_cb_impl.cc:14:3
    frame #37: 0x000000799d59dbe0 libenvoy_jni.so`event_process_active_single_queue(base=0x0000007b2272bf30, activeq=0x0000007a4272ea70, max_to_process=2147483647, endtime=0x0000000000000000) at event.c:1713:4
    frame #38: 0x000000799d5980cc libenvoy_jni.so`event_process_active(base=0x0000007b2272bf30) at event.c:1805:9
    frame #39: 0x000000799d596f14 libenvoy_jni.so`event_base_loop(base=0x0000007b2272bf30, flags=0) at event.c:2047:12
    frame #40: 0x000000799d4eb220 libenvoy_jni.so`Envoy::Event::LibeventScheduler::run(this=0x0000007b2272a3a0, mode=Block) at libevent_scheduler.cc:60:3
    frame #41: 0x000000799ce35910 libenvoy_jni.so`Envoy::Event::DispatcherImpl::run(this=0x0000007b2272a310, type=Block) at dispatcher_impl.cc:299:19
    frame #42: 0x000000799b821024 libenvoy_jni.so`Envoy::Server::InstanceImpl::run(this=0x0000007bc28e3c80) at server.cc:909:16
    frame #43: 0x000000799b654dcc libenvoy_jni.so`Envoy::MainCommonBase::run(this=0x0000007b527210a0) at main_common.cc:173:14
    frame #44: 0x000000799b5ac8ec libenvoy_jni.so`Envoy::EngineCommon::run(this=0x0000007b52720c00) at engine_common.h:26:29
    frame #45: 0x000000799b59f15c libenvoy_jni.so`Envoy::Engine::main(this=0x0000007ad2753670, config="!ignore platform_defs:\n- &connect_timeout 30s\n- &dns_fail_base_interval 2s\n- &dns_fail_max_interval 10s\n- &dns_query_timeout 25s\n- &dns_min_refresh_rate 60s\n- &dns_preresolve_hostnames []\n- &dns_lookup_family ALL\n- &dns_multiple_addresses true\n- &h2_delay_keepalive_timeout false\n- &dns_resolver_name envoy.network.dns_resolver.getaddrinfo\n- &dns_refresh_rate 60s\n- &dns_resolver_config {\"@type\":\"type.googleapis.com/envoy.extensions.network.dns_resolver.getaddrinfo.v3.GetAddrInfoDnsResolverConfig\"}\n- &enable_drain_post_dns_refresh false\n- &enable_interface_binding false\n- &force_ipv6 false\n- &h2_connection_keepalive_idle_interval 0.001s\n- &h2_connection_keepalive_timeout 10s\n- &h2_raw_domains []\n- &max_connections_per_host 7\n- &stream_idle_timeout 15s\n- &per_try_idle_timeout 15s\n- &metadata { device_os: Android, app_version: unspecified, app_id: unspecified }\n- &trust_chain_verification VERIFY_TRUST_CHAIN\n- &virtual_clusters []\n\n!ignore local_error_defs: &local_error_config\n  \"@type\": type.googleapis.com/envoymo"..., log_level="trace", admin_address_path="") at engine.cc:136:35
    frame #46: 0x000000799b620688 libenvoy_jni.so`decltype(__f=0x0000007aa274a998, __a0=0x0000007aa274a9a8, __args="", __args="", __args="")).*fp(std::__ndk1::forward<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >(fp1), std::__ndk1::forward<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >(fp1), std::__ndk1::forward<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >(fp1))) std::__ndk1::__invoke<envoy_status_t (Envoy::Engine::*)(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >), Envoy::Engine*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, void>(envoy_status_t (Envoy::Engine::*&&)(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >), Envoy::Engine*&&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >&&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >&&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >&&) at type_traits:3442:1
    frame #47: 0x000000799b620508 libenvoy_jni.so`void std::__ndk1::__thread_execute<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_delete<std::__ndk1::__thread_struct> >, envoy_status_t (Envoy::Engine::*)(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >), Envoy::Engine*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, 2ul, 3ul, 4ul, 5ul>(__t=size=6, (null)=__tuple_indices<2, 3, 4, 5> @ 0x0000007a13dbabdf)(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >), Envoy::Engine*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > >&, std::__ndk1::__tuple_indices<2ul, 3ul, 4ul, 5ul>) at thread:273:5
    frame #48: 0x000000799b61fc2c libenvoy_jni.so`void* std::__ndk1::__thread_proxy<std::__ndk1::tuple<std::__ndk1::unique_ptr<std::__ndk1::__thread_struct, std::__ndk1::default_delete<std::__ndk1::__thread_struct> >, envoy_status_t (Envoy::Engine::*)(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >), Envoy::Engine*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > > >(__vp=0x0000007aa274a990) at thread:283:5
    frame #49: 0x0000007cd125f814 libc.so`__pthread_start(void*) + 268
    frame #50: 0x0000007cd11ff2f4 libc.so`__start_thread + 68

Augustyniak avatar Jul 19 '22 13:07 Augustyniak