1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 08:48:11 +00:00

IPv4: More hacking on bringing up TCP support.

This was a bit more complicated than I expected, but it's moving forward.
This commit is contained in:
Andreas Kling 2019-03-13 23:14:30 +01:00
parent 7aba68d51c
commit 032d9d7065
7 changed files with 193 additions and 33 deletions

View file

@ -1073,6 +1073,7 @@ void Process::crash()
{
ASSERT_INTERRUPTS_DISABLED();
ASSERT(state() != Dead);
m_termination_signal = SIGSEGV;
dump_regions();
ASSERT(is_ring3());
@ -2533,7 +2534,7 @@ ssize_t Process::sys$sendto(const Syscall::SC_sendto_params* params)
if (!validate_read(data, data_length))
return -EFAULT;
if (!validate_read(addr, addr_length))
if (addr && !validate_read(addr, addr_length))
return -EFAULT;
auto* descriptor = file_descriptor(sockfd);
if (!descriptor)
@ -2559,17 +2560,21 @@ ssize_t Process::sys$recvfrom(const Syscall::SC_recvfrom_params* params)
if (!validate_write(buffer, buffer_length))
return -EFAULT;
if (!validate_read_typed(addr_length))
return -EFAULT;
if (!validate_read(addr, *addr_length))
return -EFAULT;
if (addr_length) {
if (!validate_read_typed(addr_length))
return -EFAULT;
if (!validate_read(addr, *addr_length))
return -EFAULT;
} else if (addr) {
return -EINVAL;
}
auto* descriptor = file_descriptor(sockfd);
if (!descriptor)
return -EBADF;
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 (%p)\n", buffer, buffer_length, flags, addr, addr_length);
return socket.recvfrom(buffer, buffer_length, flags, addr, addr_length);
}