From df53ebb59f47092588ca121c8416b4778520826b Mon Sep 17 00:00:00 2001 From: Sepalani Date: Fri, 23 Sep 2022 18:59:27 +0400 Subject: [PATCH 1/2] BBA/BuiltIn: Fix a crash during network stack exhaustion --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index d0b169da71..6f84fe1010 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -510,7 +510,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUDPFrame(const Common::UDPPacket& void CEXIETHERNET::BuiltInBBAInterface::HandleUPnPClient() { StackRef* ref = GetAvailableSlot(0); - if (m_upnp_httpd.accept(ref->tcp_socket) != sf::Socket::Done) + if (ref == nullptr || m_upnp_httpd.accept(ref->tcp_socket) != sf::Socket::Done) return; if (ref->tcp_socket.GetPeerName(&ref->from) != sf::Socket::Status::Done || From 34858e934fd8bc60a7b5756c86e631eebdba9242 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Fri, 23 Sep 2022 20:54:26 +0400 Subject: [PATCH 2/2] BBA/BuiltIn: Ignore UPnP request to itself --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index 6f84fe1010..4dfc0a30ee 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -520,6 +520,13 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUPnPClient() return; } + if (m_current_ip == ref->from.sin_addr.s_addr) + { + ref->tcp_socket.disconnect(); + WARN_LOG_FMT(SP1, "Ignoring UPnP request to itself"); + return; + } + ref->delay = GetTickCountStd(); ref->ip = ref->from.sin_addr.s_addr; ref->local = ref->to.sin_port;