From 063902728bc259c7bfc8e76d291173392a0e0102 Mon Sep 17 00:00:00 2001 From: Eladash Date: Sun, 12 Apr 2020 11:51:58 +0300 Subject: [PATCH] sys_net: EINVAL checks in sys_net_bnet_recvfrom --- rpcs3/Emu/Cell/lv2/sys_net.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_net.cpp b/rpcs3/Emu/Cell/lv2/sys_net.cpp index cc244c12fd..5eee9607fc 100644 --- a/rpcs3/Emu/Cell/lv2/sys_net.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_net.cpp @@ -1094,6 +1094,12 @@ error_code sys_net_bnet_recvfrom(ppu_thread& ppu, s32 s, vm::ptr buf, u32 sys_net.warning("sys_net_bnet_recvfrom(s=%d, buf=*0x%x, len=%u, flags=0x%x, addr=*0x%x, paddrlen=*0x%x)", s, buf, len, flags, addr, paddrlen); + // If addr is null, paddrlen must be null as well + if (!buf || !len || addr.operator bool() != paddrlen.operator bool()) + { + return -SYS_NET_EINVAL; + } + if (flags & ~(SYS_NET_MSG_PEEK | SYS_NET_MSG_DONTWAIT | SYS_NET_MSG_WAITALL)) { fmt::throw_exception("sys_net_bnet_recvfrom(s=%d): unknown flags (0x%x)", flags); @@ -1260,10 +1266,7 @@ error_code sys_net_bnet_recvfrom(ppu_thread& ppu, s32 s, vm::ptr buf, u32 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;