kernel: usercopy functions

This commit is contained in:
Matheus
2024-06-09 19:31:26 -03:00
parent 429f56aced
commit 50b4b45d00
53 changed files with 712 additions and 260 deletions
+8 -3
View File
@@ -48,14 +48,19 @@ syscallret_t syscall_recvmsg(context_t *, int fd, msghdr_t *umsghdr, int flags)
uintmax_t iovoffset = 0;
for (int i = 0; i < msghdr.iovcount; ++i) {
memcpy(msghdr.iov[i].addr, (void *)((uintptr_t)buffer + iovoffset), msghdr.iov[i].len);
ret.errno = usercopy_touser(msghdr.iov[i].addr, (void *)((uintptr_t)buffer + iovoffset), msghdr.iov[i].len);
if (ret.errno)
goto cleanup;
iovoffset += msghdr.iov[i].len;
}
if (umsghdr->addr) {
ret.errno = sock_addrtoabiaddr(socket->type, &sockaddr, umsghdr->addr);
if (msghdr.addr) {
abisockaddr_t abisockaddr;
ret.errno = sock_addrtoabiaddr(socket->type, &sockaddr, &abisockaddr);
if (ret.errno)
goto cleanup;
ret.errno = usercopy_touser(msghdr.addr, &abisockaddr, min(sizeof(abisockaddr), msghdr.addrlen));
}
cleanup: