[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] linux-user: fix host_to_target_cmsg in case of mult
From: |
Jonathan Neuschäfer |
Subject: |
[Qemu-devel] [PATCH] linux-user: fix host_to_target_cmsg in case of multiple headers |
Date: |
Thu, 27 Aug 2015 16:50:35 +0200 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
In the current implementation, __target_cmsg_nxthdr compares a pointer
derived from target_cmsg against the msg_control field of target_msgh
(through subtraction). This failed for me when emulating i386 code
under x86_64, because pointers in the host address space and pointers in
the guest address space were not the same. This patch adds a g2h()
address translation around the msg_control value.
Signed-off-by: Jonathan Neuschäfer <address@hidden>
---
linux-user/syscall_defs.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index edd5f3c..1eaaf2a 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -248,7 +248,7 @@ __target_cmsg_nxthdr (struct target_msghdr *__mhdr, struct
target_cmsghdr *__cms
__ptr = (struct target_cmsghdr *)((unsigned char *) __cmsg
+ TARGET_CMSG_ALIGN
(tswapal(__cmsg->cmsg_len)));
- if ((unsigned long)((char *)(__ptr+1) - (char
*)(size_t)tswapal(__mhdr->msg_control))
+ if ((unsigned long)((char *)(__ptr+1) - (char
*)g2h(tswapal(__mhdr->msg_control)))
> tswapal(__mhdr->msg_controllen))
/* No more entries. */
return (struct target_cmsghdr *)0;
--
2.5.0
- [Qemu-devel] [PATCH] linux-user: fix host_to_target_cmsg in case of multiple headers,
Jonathan Neuschäfer <=