[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] syscall: fix special case of write(fd, NULL, 0)
From: |
zhuoweizhang |
Subject: |
[Qemu-devel] [PATCH] syscall: fix special case of write(fd, NULL, 0) |
Date: |
Fri, 29 Sep 2017 12:50:16 -0400 |
From: Zhuowei Zhang <address@hidden>
Linux returns success for the special case of calling write with a zero-length
NULL buffer: compiling and running
```
int main() {
ssize_t ret = write(STDOUT_FILENO, NULL, 0);
fprintf(stderr, "write returned %ld\n", ret);
return 0;
}
```
gives "write returned 0" when run directly, but "write returned -1" in QEMU.
This commit checks for this situation and returns success if found.
Signed-off-by: Zhuowei Zhang <address@hidden>
---
linux-user/syscall.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 9b6364a..ecadf49 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7783,6 +7783,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
arg1,
}
break;
case TARGET_NR_write:
+ if (arg2 == 0 && arg3 == 0) {
+ /* special case: write(fd, NULL, 0) returns success. */
+ ret = 0;
+ break;
+ }
if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1)))
goto efault;
if (fd_trans_target_to_host_data(arg1)) {
--
1.9.1
.
- [Qemu-devel] [PATCH] syscall: fix special case of write(fd, NULL, 0),
zhuoweizhang <=