[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/10] linux-user: pass sockaddr from host to target
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH 04/10] linux-user: pass sockaddr from host to target |
Date: |
Tue, 14 Aug 2012 10:40:30 +0100 |
From: Jing Huang <address@hidden>
Signed-off-by: Jing Huang <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
---
linux-user/syscall.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 1af68d2..47f0eb3 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1268,7 +1268,6 @@ static inline abi_long host_to_target_sockaddr(abi_ulong
target_addr,
return 0;
}
-/* ??? Should this also swap msgh->name? */
static inline abi_long target_to_host_cmsg(struct msghdr *msgh,
struct target_msghdr *target_msgh)
{
@@ -1325,7 +1324,6 @@ static inline abi_long target_to_host_cmsg(struct msghdr
*msgh,
return 0;
}
-/* ??? Should this also swap msgh->name? */
static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh,
struct msghdr *msgh)
{
@@ -1885,10 +1883,22 @@ static abi_long do_sendrecvmsg(int fd, abi_ulong
target_msg,
if (!is_error(ret)) {
len = ret;
ret = host_to_target_cmsg(msgp, &msg);
- if (!is_error(ret))
+ if (!is_error(ret)) {
+ msgp->msg_namelen = tswap32(msg.msg_namelen);
+ if (msg.msg_name != NULL) {
+ ret = host_to_target_sockaddr(tswapal(msgp->msg_name),
+ msg.msg_name, msg.msg_namelen);
+ if (ret) {
+ goto out;
+ }
+ }
+
ret = len;
+ }
}
}
+
+out:
unlock_iovec(vec, target_vec, count, !send);
unlock_user_struct(msgp, target_msg, send ? 0 : 1);
return ret;
--
1.7.9.5
- [Qemu-devel] [PATCH 09/10] linux-user: Use init_guest_space when -R and -B are specified, (continued)
- [Qemu-devel] [PATCH 09/10] linux-user: Use init_guest_space when -R and -B are specified, Peter Maydell, 2012/08/14
- [Qemu-devel] [PATCH 08/10] linux-user: Factor out guest space probing into a function, Peter Maydell, 2012/08/14
- [Qemu-devel] [PATCH 02/10] linux-user: Fix SNDCTL_DSP_MAP{IN, OUT}BUF ioctl definitions, Peter Maydell, 2012/08/14
- [Qemu-devel] [PATCH 07/10] flatload: fix bss clearing, Peter Maydell, 2012/08/14
- [Qemu-devel] [PATCH 03/10] linux-user: Move target_to_host_errno_table[] setup out of ioctl loop, Peter Maydell, 2012/08/14
[Qemu-devel] [PATCH 05/10] linux-user: make do_setsockopt support SOL_RAW ICMP_FILTER socket option, Peter Maydell, 2012/08/14
[Qemu-devel] [PATCH 04/10] linux-user: pass sockaddr from host to target,
Peter Maydell <=
Re: [Qemu-devel] [PULL for-1.2 00/10] linux-user queue, Blue Swirl, 2012/08/14