linux-user: Use safe_syscall wrapper for send* and recv* syscalls
Use the safe_syscall wrapper for the send, sendto, sendmsg, recv, recvfrom and recvmsg syscalls. RV: adjusted to apply Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
2a3c761928
commit
666875306e
@ -716,6 +716,12 @@ safe_syscall3(ssize_t, readv, int, fd, const struct iovec *, iov, int, iovcnt)
|
|||||||
safe_syscall3(ssize_t, writev, int, fd, const struct iovec *, iov, int, iovcnt)
|
safe_syscall3(ssize_t, writev, int, fd, const struct iovec *, iov, int, iovcnt)
|
||||||
safe_syscall3(int, connect, int, fd, const struct sockaddr *, addr,
|
safe_syscall3(int, connect, int, fd, const struct sockaddr *, addr,
|
||||||
socklen_t, addrlen)
|
socklen_t, addrlen)
|
||||||
|
safe_syscall6(ssize_t, sendto, int, fd, const void *, buf, size_t, len,
|
||||||
|
int, flags, const struct sockaddr *, addr, socklen_t, addrlen)
|
||||||
|
safe_syscall6(ssize_t, recvfrom, int, fd, void *, buf, size_t, len,
|
||||||
|
int, flags, struct sockaddr *, addr, socklen_t *, addrlen)
|
||||||
|
safe_syscall3(ssize_t, sendmsg, int, fd, const struct msghdr *, msg, int, flags)
|
||||||
|
safe_syscall3(ssize_t, recvmsg, int, fd, struct msghdr *, msg, int, flags)
|
||||||
|
|
||||||
static inline int host_to_target_sock_type(int host_type)
|
static inline int host_to_target_sock_type(int host_type)
|
||||||
{
|
{
|
||||||
@ -2910,10 +2916,10 @@ static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp,
|
|||||||
ret = target_to_host_cmsg(&msg, msgp);
|
ret = target_to_host_cmsg(&msg, msgp);
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
ret = get_errno(sendmsg(fd, &msg, flags));
|
ret = get_errno(safe_sendmsg(fd, &msg, flags));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = get_errno(recvmsg(fd, &msg, flags));
|
ret = get_errno(safe_recvmsg(fd, &msg, flags));
|
||||||
if (!is_error(ret)) {
|
if (!is_error(ret)) {
|
||||||
len = ret;
|
len = ret;
|
||||||
if (fd_trans_host_to_target_data(fd)) {
|
if (fd_trans_host_to_target_data(fd)) {
|
||||||
@ -3162,9 +3168,9 @@ static abi_long do_sendto(int fd, abi_ulong msg, size_t len, int flags,
|
|||||||
unlock_user(host_msg, msg, 0);
|
unlock_user(host_msg, msg, 0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = get_errno(sendto(fd, host_msg, len, flags, addr, addrlen));
|
ret = get_errno(safe_sendto(fd, host_msg, len, flags, addr, addrlen));
|
||||||
} else {
|
} else {
|
||||||
ret = get_errno(send(fd, host_msg, len, flags));
|
ret = get_errno(safe_sendto(fd, host_msg, len, flags, NULL, 0));
|
||||||
}
|
}
|
||||||
unlock_user(host_msg, msg, 0);
|
unlock_user(host_msg, msg, 0);
|
||||||
return ret;
|
return ret;
|
||||||
@ -3193,10 +3199,11 @@ static abi_long do_recvfrom(int fd, abi_ulong msg, size_t len, int flags,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
addr = alloca(addrlen);
|
addr = alloca(addrlen);
|
||||||
ret = get_errno(recvfrom(fd, host_msg, len, flags, addr, &addrlen));
|
ret = get_errno(safe_recvfrom(fd, host_msg, len, flags,
|
||||||
|
addr, &addrlen));
|
||||||
} else {
|
} else {
|
||||||
addr = NULL; /* To keep compiler quiet. */
|
addr = NULL; /* To keep compiler quiet. */
|
||||||
ret = get_errno(qemu_recv(fd, host_msg, len, flags));
|
ret = get_errno(safe_recvfrom(fd, host_msg, len, flags, NULL, 0));
|
||||||
}
|
}
|
||||||
if (!is_error(ret)) {
|
if (!is_error(ret)) {
|
||||||
if (target_addr) {
|
if (target_addr) {
|
||||||
|
Loading…
Reference in New Issue
Block a user