[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Bug 1716292] Re: User mode emulation returns wrong value f

From: Tony Garnock-Jones
Subject: [Qemu-devel] [Bug 1716292] Re: User mode emulation returns wrong value for write(fd, NULL, 0)
Date: Fri, 07 Sep 2018 10:56:33 -0000

This happens for me also, with qemu version 2.12.0 (Debian

An initial patch was proposed here: https://lists.gnu.org/archive/html

Discussion pointed out some problems, and the patch languished and was
not accepted.

Here is a summary of the changes needed for it to be more likely for the
patch to be accepted: https://lists.gnu.org/archive/html/qemu-

 - change from "ret = 0" to something like "ret = get_errno(safe_write(arg1, 
NULL, 0))"
 - change TARGET_NR_read to do the same, instead of its current short-circuit 
behaviour for count==0
 - check pread64/pwrite64 to see if they need a similar change as well

You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.

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

Status in QEMU:

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:

  address@hidden:/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;
  address@hidden:/tmp$ gcc -o writezerobytes writezerobytes.c
  address@hidden:/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
  address@hidden:/tmp$ ./writezerobytes
  write returned 0
  write returned -1
  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:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]