1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-13 15:17:36 +00:00

Kernel: recvfrom() should treat the address arguments as outparams.

This commit is contained in:
Andreas Kling 2019-03-13 14:47:21 +01:00
parent b59d588c04
commit 19a51132f5
10 changed files with 32 additions and 28 deletions

View file

@ -2554,12 +2554,14 @@ ssize_t Process::sys$recvfrom(const Syscall::SC_recvfrom_params* params)
void* buffer = params->buffer;
size_t buffer_length = params->buffer_length;
int flags = params->flags;
auto* addr = (const sockaddr*)params->addr;
auto addr_length = (socklen_t)params->addr_length;
auto* addr = (sockaddr*)params->addr;
auto* addr_length = (socklen_t*)params->addr_length;
if (!validate_write(buffer, buffer_length))
return -EFAULT;
if (!validate_read(addr, addr_length))
if (!validate_read_typed(addr_length))
return -EFAULT;
if (!validate_read(addr, *addr_length))
return -EFAULT;
auto* descriptor = file_descriptor(sockfd);
if (!descriptor)
@ -2567,7 +2569,7 @@ ssize_t Process::sys$recvfrom(const Syscall::SC_recvfrom_params* params)
if (!descriptor->is_socket())
return -ENOTSOCK;
auto& socket = *descriptor->socket();
kprintf("recvfrom %p (%u), flags=%u, addr: %p (%u)\n", buffer, buffer_length, flags, addr, addr_length);
kprintf("recvfrom %p (%u), flags=%u, addr: %p (%u)\n", buffer, buffer_length, flags, addr, *addr_length);
return socket.recvfrom(buffer, buffer_length, flags, addr, addr_length);
}