diff options
author | gnisman <gleb.nisman@gmail.com> | 2022-12-26 15:49:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-26 13:49:26 +0000 |
commit | a4fdfb5f94121f5c60fc5717175fd21f3e774e85 (patch) | |
tree | 17473f6c5d37128f4a2b7f989fb09ba0f27931e1 | |
parent | 37d27c4c99486312d9a282d7fc056c657efe0848 (diff) |
bsd::RecvFrom: verify output buffer size before writing socket address (#4135)1.1.490
* bsd::RecvFrom: Ryujinx does not verify output buffer size before writing socket address
* Calculate the size of BsdSockAddr
* use bsdSockAddr variable
* Update Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs
Co-authored-by: Mary-nyan <thog@protonmail.com>
* Update Ryujinx.HLE/HOS/Services/Sockets/Bsd/Types/BsdSockAddr.cs
Co-authored-by: Mary-nyan <thog@protonmail.com>
* set errno to ENOMEM in case we can't write the address to memory
* Update Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs
Co-authored-by: Ac_K <Acoustik666@gmail.com>
* Update Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs
Co-authored-by: Mary-nyan <thog@protonmail.com>
Co-authored-by: Ac_K <Acoustik666@gmail.com>
-rw-r--r-- | Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs index eaf65e4c..bc174cce 100644 --- a/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs +++ b/Ryujinx.HLE/HOS/Services/Sockets/Bsd/IClient.cs @@ -530,7 +530,14 @@ namespace Ryujinx.HLE.HOS.Services.Sockets.Bsd receiveRegion.Dispose(); - context.Memory.Write(sockAddrOutPosition, BsdSockAddr.FromIPEndPoint(endPoint)); + if (sockAddrOutSize != 0 && sockAddrOutSize >= (ulong) Unsafe.SizeOf<BsdSockAddr>()) + { + context.Memory.Write(sockAddrOutPosition, BsdSockAddr.FromIPEndPoint(endPoint)); + } + else + { + errno = LinuxError.ENOMEM; + } } } |