linux-user/syscall.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
Target errno should be converted to host errno in IP_RECVERR
and IPV6_RECVERR socket options.
Fixes: ee1ac3a1822 ("linux-user: Add sockopts for IPv6")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/602
Reported-by: Conrad Meyer <cem@FreeBSD.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
linux-user/syscall.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index ccd3892b2df..edc9d6b5ba2 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1967,7 +1967,8 @@ static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh,
tgt_len != sizeof(struct errhdr_t)) {
goto unimplemented;
}
- __put_user(errh->ee.ee_errno, &target_errh->ee.ee_errno);
+ __put_user(get_errno(errh->ee.ee_errno),
+ &target_errh->ee.ee_errno);
__put_user(errh->ee.ee_origin, &target_errh->ee.ee_origin);
__put_user(errh->ee.ee_type, &target_errh->ee.ee_type);
__put_user(errh->ee.ee_code, &target_errh->ee.ee_code);
@@ -2011,7 +2012,8 @@ static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh,
tgt_len != sizeof(struct errhdr6_t)) {
goto unimplemented;
}
- __put_user(errh->ee.ee_errno, &target_errh->ee.ee_errno);
+ __put_user(get_errno(errh->ee.ee_errno),
+ &target_errh->ee.ee_errno);
__put_user(errh->ee.ee_origin, &target_errh->ee.ee_origin);
__put_user(errh->ee.ee_type, &target_errh->ee.ee_type);
__put_user(errh->ee.ee_code, &target_errh->ee.ee_code);
--
2.31.1
On 9/7/21 1:13 PM, Philippe Mathieu-Daudé wrote: > Target errno should be converted to host errno in IP_RECVERR > and IPV6_RECVERR socket options. I meant "Host errno must be converted to target errno ..." > Fixes: ee1ac3a1822 ("linux-user: Add sockopts for IPv6") > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/602 > Reported-by: Conrad Meyer <cem@FreeBSD.org> > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > linux-user/syscall.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index ccd3892b2df..edc9d6b5ba2 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -1967,7 +1967,8 @@ static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh, > tgt_len != sizeof(struct errhdr_t)) { > goto unimplemented; > } > - __put_user(errh->ee.ee_errno, &target_errh->ee.ee_errno); > + __put_user(get_errno(errh->ee.ee_errno), > + &target_errh->ee.ee_errno); > __put_user(errh->ee.ee_origin, &target_errh->ee.ee_origin); > __put_user(errh->ee.ee_type, &target_errh->ee.ee_type); > __put_user(errh->ee.ee_code, &target_errh->ee.ee_code); > @@ -2011,7 +2012,8 @@ static inline abi_long host_to_target_cmsg(struct target_msghdr *target_msgh, > tgt_len != sizeof(struct errhdr6_t)) { > goto unimplemented; > } > - __put_user(errh->ee.ee_errno, &target_errh->ee.ee_errno); > + __put_user(get_errno(errh->ee.ee_errno), > + &target_errh->ee.ee_errno); > __put_user(errh->ee.ee_origin, &target_errh->ee.ee_origin); > __put_user(errh->ee.ee_type, &target_errh->ee.ee_type); > __put_user(errh->ee.ee_code, &target_errh->ee.ee_code); >
© 2016 - 2024 Red Hat, Inc.