Index: qemu/linux-user/syscall.c =================================================================== --- qemu.orig/linux-user/syscall.c 2007-11-28 17:26:46.000000000 -0700 +++ qemu/linux-user/syscall.c 2007-11-28 17:29:11.000000000 -0700 @@ -3398,10 +3398,14 @@ ret = 0; /* avoid warning */ break; case TARGET_NR_read: - if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) - goto efault; - ret = get_errno(read(arg1, p, arg3)); - unlock_user(p, arg2, ret); + if (!arg3) + ret = 0; + else { + if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) + goto efault; + ret = get_errno(read(arg1, p, arg3)); + unlock_user(p, arg2, ret); + } break; case TARGET_NR_write: if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1)))