From 442035c25180a080b3c9433f9ed7251ca584d87a Mon Sep 17 00:00:00 2001 From: Eladash Date: Sun, 12 Apr 2020 12:03:00 +0300 Subject: [PATCH] sys_net: EINVAL checks in sys_net_bnet_accept --- rpcs3/Emu/Cell/lv2/sys_net.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_net.cpp b/rpcs3/Emu/Cell/lv2/sys_net.cpp index 5eee9607fc..bc0b06b256 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net.cpp @@ -373,6 +373,11 @@ error_code sys_net_bnet_accept(ppu_thread& ppu, s32 s, vm::ptr sys_net.warning("sys_net_bnet_accept(s=%d, addr=*0x%x, paddrlen=*0x%x)", s, addr, paddrlen); + if (addr.operator bool() != paddrlen.operator bool() || (paddrlen && *paddrlen < addr.size())) + { + return -SYS_NET_EINVAL; + } + lv2_socket::socket_type native_socket = -1; ::sockaddr_storage native_addr; ::socklen_t native_addrlen = sizeof(native_addr); @@ -480,10 +485,7 @@ error_code sys_net_bnet_accept(ppu_thread& ppu, s32 s, vm::ptr vm::ptr paddr = vm::cast(addr.addr()); - if (paddrlen) - { - *paddrlen = sizeof(sys_net_sockaddr_in); - } + *paddrlen = sizeof(sys_net_sockaddr_in); paddr->sin_len = sizeof(sys_net_sockaddr_in); paddr->sin_family = SYS_NET_AF_INET;