dolphin/Source
Dentomologist dd1f5f9726 NetKDRequestDevice: Fix use-after-free crash
Explicitly shut down work queues in NetKDRequestDevice's destructor to
prevent their threads from accessing members after they've been freed.

This crash would occur sporadically if NetKDRequestDevice's periodic
download or mail checks happened to overlap with emulation shutdown in
the wrong way.

An example sequence of events that could cause the crash:
* m_scheduler_timer_thread queues a periodic Download event in
  m_scheduler_work_queue, then waits for m_shutdown_event.
* A request to stop emulation results in s_ios being reset by the CPU
  thread. This triggers NetKDRequestDevice's destructor which sets
  m_shutdown_event and joins m_scheduler_timer_thread.
* m_scheduler_timer_thread wakes from m_shutdown_event and returns from
  its thread function, ending the thread.
* The CPU thread resumes execution at the end of NetKDRequestDevice's
  destructor and begins destroying NetKDRequestDevice's members in
  reverse declaration order.
* m_http is declared after m_scheduler_work_queue and is therefore
  destroyed earlier.
* m_scheduler_work_queue's destructor calls its Shutdown function, which
  by default finishes the work items in the queue.
* The queued Download event calls KDDownload which calls m_http.Get()
  which calls Fetch() which passes garbage data from the freed m_curl
  into curl_easy_setopt().
* Curl promptly crashes.

Shutting down the work queues manually in the destructor prevents the
above because m_http and the other members don't get freed until after
the queue threads finish.
2023-12-24 15:04:35 -08:00
..
Android Merge pull request #12346 from iwubcode/arb_mipmaps_default_off 2023-12-16 16:23:10 +01:00
Core NetKDRequestDevice: Fix use-after-free crash 2023-12-24 15:04:35 -08:00
DSPSpy DSPSpy: Add st3 BLOOP{,I} tests. 2022-09-30 11:07:41 +00:00
DSPTool Use GNUInstallDirs for installation paths 2023-01-30 09:44:44 -06:00
PCH bump minimum VS version to 17.6 2023-05-16 20:21:36 -07:00
UnitTests Merge pull request #11497 from vyuuui/debugger_assembler_ui 2023-12-16 21:15:31 +00:00
VSProps Remove redundant 32-bit code 2023-11-28 23:03:26 +11:00
.clang-format Replace Cpp11 (A Deprecated alias for Latest) in .clang-format 2022-06-22 08:57:32 +10:00
CMakeLists.txt Revert "Android: Don't hold gameFileCache lock during updateAdditionalMetadata" 2022-09-27 19:06:05 +02:00
dolphin-emu.sln Fix Windows ARM64 debug build errors 2023-12-17 11:31:28 -08:00