[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 6/6] syscall: fixed mincore(2) not failing with ENOME
From: |
Laurent Vivier |
Subject: |
[Qemu-devel] [PULL 6/6] syscall: fixed mincore(2) not failing with ENOMEM |
Date: |
Mon, 27 Feb 2017 23:33:37 +0100 |
From: "Franklin \\\"Snaipe\\\" Mathieu" <address@hidden>
The current implementation of the mincore(2) syscall sets errno to
EFAULT when the region identified by the first two parameters is
invalid.
This goes against the man page specification, where mincore(2) should
only fail with EFAULT when the third parameter is an invalid address;
and fail with ENOMEM when the checked region does not point to mapped
memory.
Signed-off-by: Franklin "Snaipe" Mathieu <address@hidden>
Cc: Riku Voipio <address@hidden>
Cc: Aurelien Jarno <address@hidden>
Reviewed-by: Laurent Vivier <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Laurent Vivier <address@hidden>
---
linux-user/syscall.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 2bba500..cec8428 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11194,11 +11194,16 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
arg1,
case TARGET_NR_mincore:
{
void *a;
+ ret = -TARGET_ENOMEM;
+ a = lock_user(VERIFY_READ, arg1, arg2, 0);
+ if (!a) {
+ goto fail;
+ }
ret = -TARGET_EFAULT;
- if (!(a = lock_user(VERIFY_READ, arg1,arg2, 0)))
- goto efault;
- if (!(p = lock_user_string(arg3)))
+ p = lock_user_string(arg3);
+ if (!p) {
goto mincore_fail;
+ }
ret = get_errno(mincore(a, arg2, p));
unlock_user(p, arg3, ret);
mincore_fail:
--
2.9.3
- [Qemu-devel] [PULL 0/6] Linux user for upstream patches, Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 1/6] linux-user: fix fork(), Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 2/6] linux-user: Add sockopts for IPv6 ping and IPv6 traceroute, Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 4/6] linux-user: correctly manage SR in ucontext, Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 3/6] linux-user: Add signal handling support for x86_64, Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 5/6] linux-user: fix do_rt_sigreturn on m68k linux userspace emulation, Laurent Vivier, 2017/02/27
- [Qemu-devel] [PULL 6/6] syscall: fixed mincore(2) not failing with ENOMEM,
Laurent Vivier <=
- Re: [Qemu-devel] [PULL 0/6] Linux user for upstream patches, Peter Maydell, 2017/02/28