mirror of
https://github.com/qemu/qemu.git
synced 2025-08-09 10:25:06 +00:00
linux-user: don't short-circuit read with zero length
A zero-length read still needs to do the usual checks, thus it may return errors like EBADF. This makes the read syscall emulation consistent with the pread64 syscall emulation. Signed-off-by: Andreas Schwab <schwab@suse.de> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <mvm5zsxz2we.fsf@suse.de> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
14c8a3a157
commit
ba584f1de3
@ -7009,8 +7009,8 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
|
|||||||
_exit(arg1);
|
_exit(arg1);
|
||||||
return 0; /* avoid warning */
|
return 0; /* avoid warning */
|
||||||
case TARGET_NR_read:
|
case TARGET_NR_read:
|
||||||
if (arg3 == 0) {
|
if (arg2 == 0 && arg3 == 0) {
|
||||||
return 0;
|
return get_errno(safe_read(arg1, 0, 0));
|
||||||
} else {
|
} else {
|
||||||
if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
|
if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0)))
|
||||||
return -TARGET_EFAULT;
|
return -TARGET_EFAULT;
|
||||||
|
Loading…
Reference in New Issue
Block a user