syscall: read() should not write anything if reading EOF.
authorNicolas Derumigny <nderumigny@gmail.com>
Sat, 15 Oct 2016 20:06:24 +0000 (15:06 -0500)
committerNicolas Derumigny <nderumigny@gmail.com>
Sat, 15 Oct 2016 20:06:24 +0000 (15:06 -0500)
Read() should not write anything when returning 0 (EOF).
This patch does not correct the same bug occuring for :

nbr_read=read(file, buf, nbytes)

When nbr_read<nbytes, nbytes bytes are copied into the virtual
RAM instead of nbr_read. If buf is smaller than nbytes, a
page fault occurs, even if buf is in fact bigger than nbr_read.

Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
src/sim/syscall_emul.cc

index 392658c5a0ec87bc919edd397678194ba58b405d..e62a8686ae0d61982a593be208ab4dddf47cb745 100644 (file)
@@ -245,7 +245,7 @@ readFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
 
     int bytes_read = read(sim_fd, bufArg.bufferPtr(), nbytes);
 
-    if (bytes_read != -1)
+    if (bytes_read > 0)
         bufArg.copyOut(tc->getMemProxy());
 
     return bytes_read;