Public bug reported:

QEMU version: latest master (fcea73709b966a7ded9efa7b106ea50c7fe9025c)
OS version: Ubuntu 14.04.5
Configured with: ../configure --target-list=x86_64-linux-user

QEMU Linux usermode emulation does not handle write() syscalls with zero
length and a null pointer correctly: on Linux this returns 0, but in
emulation this returns -1.

I ran into this while using an aarch64 abuild-tar from Alpine Linux in
user-mode emulation; here's the minimized reproduction test case:

zhuowei@zhuowei-tablet:/tmp$ cat writezerobytes.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
 ssize_t ret = write(STDOUT_FILENO, NULL, 0);
 fprintf(stderr, "write returned %ld\n", ret);
 return 0;
}
zhuowei@zhuowei-tablet:/tmp$ gcc -o writezerobytes writezerobytes.c
zhuowei@zhuowei-tablet:/tmp$ uname -a
Linux zhuowei-tablet 3.13.0-129-generic #178-Ubuntu SMP Fri Aug 11 12:48:20 UTC 
2017 x86_64 x86_64 x86_64 GNU/Linux
zhuowei@zhuowei-tablet:/tmp$ ./writezerobytes
write returned 0
zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
./writezerobytes
write returned -1
zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
--version
qemu-x86_64 version 2.10.50 (v2.10.0-471-gfcea737-dirty)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

** Affects: qemu
     Importance: Undecided
         Status: New

** Description changed:

  QEMU version: latest master (fcea73709b966a7ded9efa7b106ea50c7fe9025c)
- OS version: Ubuntu 14.04.3
+ OS version: Ubuntu 14.04.5
  Configured with: ../configure --target-list=x86_64-linux-user
  
  QEMU Linux usermode emulation does not handle write() syscalls with zero
  length and a null pointer correctly: on Linux this returns 0, but in
  emulation this returns -1.
  
  I ran into this while using an aarch64 abuild-tar from Alpine Linux in
  user-mode emulation; here's the minimized reproduction test case:
  
  zhuowei@zhuowei-tablet:/tmp$ cat writezerobytes.c
  #include <stdio.h>
  #include <unistd.h>
  #include <fcntl.h>
  
  int main() {
-       ssize_t ret = write(STDOUT_FILENO, NULL, 0);
-       fprintf(stderr, "write returned %ld\n", ret);
-       return 0;
+  ssize_t ret = write(STDOUT_FILENO, NULL, 0);
+  fprintf(stderr, "write returned %ld\n", ret);
+  return 0;
  }
  zhuowei@zhuowei-tablet:/tmp$ gcc -o writezerobytes writezerobytes.c
  zhuowei@zhuowei-tablet:/tmp$ uname -a
  Linux zhuowei-tablet 3.13.0-129-generic #178-Ubuntu SMP Fri Aug 11 12:48:20 
UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
- zhuowei@zhuowei-tablet:/tmp$ ./writezerobytes 
- write returned 0        
+ zhuowei@zhuowei-tablet:/tmp$ ./writezerobytes
+ write returned 0
  zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
./writezerobytes
  write returned -1
  zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
--version
  qemu-x86_64 version 2.10.50 (v2.10.0-471-gfcea737-dirty)
  Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1716292

Title:
  User mode emulation returns wrong value for write(fd, NULL, 0)

Status in QEMU:
  New

Bug description:
  QEMU version: latest master (fcea73709b966a7ded9efa7b106ea50c7fe9025c)
  OS version: Ubuntu 14.04.5
  Configured with: ../configure --target-list=x86_64-linux-user

  QEMU Linux usermode emulation does not handle write() syscalls with
  zero length and a null pointer correctly: on Linux this returns 0, but
  in emulation this returns -1.

  I ran into this while using an aarch64 abuild-tar from Alpine Linux in
  user-mode emulation; here's the minimized reproduction test case:

  zhuowei@zhuowei-tablet:/tmp$ cat writezerobytes.c
  #include <stdio.h>
  #include <unistd.h>
  #include <fcntl.h>

  int main() {
   ssize_t ret = write(STDOUT_FILENO, NULL, 0);
   fprintf(stderr, "write returned %ld\n", ret);
   return 0;
  }
  zhuowei@zhuowei-tablet:/tmp$ gcc -o writezerobytes writezerobytes.c
  zhuowei@zhuowei-tablet:/tmp$ uname -a
  Linux zhuowei-tablet 3.13.0-129-generic #178-Ubuntu SMP Fri Aug 11 12:48:20 
UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  zhuowei@zhuowei-tablet:/tmp$ ./writezerobytes
  write returned 0
  zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
./writezerobytes
  write returned -1
  zhuowei@zhuowei-tablet:/tmp$ 
/media/zhuowei/redhd/docs/repos/qemu/build4/x86_64-linux-user/qemu-x86_64 
--version
  qemu-x86_64 version 2.10.50 (v2.10.0-471-gfcea737-dirty)
  Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1716292/+subscriptions

Reply via email to