In window, openvpn crash when forbid tun network card
Open
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 1.2k
- Forks
- 467
- PR merge metrics
- No merged PRs in 30d
Description
Reproduce
I edit a client to wrap openvpn3. It just call connect.
I forbid network card in control panel after connected. It will crash
Error Infomation
0xC0000008: An invalid handle was specified.
Environment
- openvpn3: 3.7.0
- win11: 21H2
Stack Information
ntdll.dll!KiRaiseUserExceptionDispatcher() 未知
KernelBase.dll!CloseHandle() 未知
> libovpn.dll!asio::detail::win_iocp_handle_service::close_for_destruction(asio::detail::win_iocp_handle_service::implementation_type & impl) 行 545 C++
libovpn.dll!asio::detail::win_iocp_handle_service::destroy(asio::detail::win_iocp_handle_service::implementation_type & impl) 行 167 C++
libovpn.dll!asio::detail::io_object_impl<asio::detail::win_iocp_handle_service,asio::any_io_executor>::~io_object_impl<asio::detail::win_iocp_handle_service,asio::any_io_executor>() 行 88 C++
libovpn.dll!asio::windows::basic_overlapped_handle<asio::any_io_executor>::~basic_overlapped_handle<asio::any_io_executor>() 行 340 C++
[外部代码]
libovpn.dll!openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>::close() 行 90 C++
libovpn.dll!openvpn::TunWrapTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>>::close() 行 99 C++
libovpn.dll!openvpn::TunWrapTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>>::~TunWrapTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>>() 行 47 C++
libovpn.dll!openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>::~TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>() 行 58 C++
[外部代码]
libovpn.dll!openvpn::intrusive_ptr_release<openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>>(openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState> * p) 行 738 C++
libovpn.dll!openvpn::RCPtr<openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>>::~RCPtr<openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>>() 行 140 C++
libovpn.dll!openvpn::RCPtr<openvpn::TunPersistTemplate<openvpn::ScopedAsioStream<asio::windows::basic_stream_handle<asio::any_io_executor>>,openvpn::TunWin::TunPersistState>>::reset() 行 157 C++
libovpn.dll!openvpn::TunWin::WintunClient::stop() 行 120 C++
libovpn.dll!openvpn::ClientProto::Session::stop(const bool call_terminate_callback) 行 244 C++
libovpn.dll!openvpn::ClientProto::Session::tun_error(const openvpn::Error::Type fatal_err, const std::string & err_text) 行 809 C++
libovpn.dll!openvpn::TunWin::WintunClient::read() 行 219 C++
libovpn.dll!openvpn::TunWin::WintunClient::read::__l15::<lambda>(const std::error_code & error) 行 230 C++
libovpn.dll!asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code>::operator()() 行 172 C++
libovpn.dll!asio::asio_handler_invoke<asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code>>(asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code> & function, ...) 行 91 C++
libovpn.dll!asio_handler_invoke_helpers::invoke<asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code>,void <lambda>(const std::error_code &)>(asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code> & function, openvpn::TunWin::WintunClient::read::__l15::void <lambda>(const std::error_code &) & context) 行 56 C++
libovpn.dll!asio::detail::handler_work<void <lambda>(const std::error_code &),asio::any_io_executor,void>::complete<asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code>>(asio::detail::binder1<void <lambda>(const std::error_code &),std::error_code> & function, openvpn::TunWin::WintunClient::read::__l15::void <lambda>(const std::error_code &) & handler) 行 512 C++
libovpn.dll!asio::detail::wait_handler<void <lambda>(const std::error_code &),asio::any_io_executor>::do_complete(void * owner, asio::detail::win_iocp_operation * base, const std::error_code & __formal, unsigned __int64 __formal) 行 75 C++
libovpn.dll!asio::detail::win_iocp_operation::complete(void * owner, const std::error_code & ec, unsigned __int64 bytes_transferred) 行 47 C++
libovpn.dll!asio::detail::win_iocp_io_context::do_one(unsigned long msec, asio::detail::win_iocp_thread_info & this_thread, std::error_code & ec) 行 473 C++
libovpn.dll!asio::detail::win_iocp_io_context::run(std::error_code & ec) 行 203 C++
libovpn.dll!asio::io_context::run() 行 62 C++
libovpn.dll!openvpn::ClientAPI::OpenVPNClient::connect_run() 行 1141 C++
libovpn.dll!openvpn::ClientAPI::OpenVPNClient::do_connect() 行 931 C++
libovpn.dll!openvpn::ClientAPI::OpenVPNClient::connect() 行 914 C++
libovpn.dll!libopenvpn::OVPNClientImpl::connect() 行 13 C++
openvpn_flutter_plugin.dll!openvpn_flutter_plugin::FlutterOpenVPN::StartThread::__l2::<lambda>() 行 187 C++
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the Windows 11 failure by connecting with openvpn3 3.7.0, then disabling the TUN network adapter. Start at openvpn::TunWin::WintunClient::read() and stop(), following cleanup through TunWrapTemplate::close() to Asio's win_iocp_handle_service destruction. Done means the adapter failure is handled without the invalid-handle crash.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- networking, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100