readi: Fix sign handling problems
authorAlan Cox <alan@linux.intel.com>
Thu, 4 Jun 2015 10:43:14 +0000 (11:43 +0100)
committerAlan Cox <alan@linux.intel.com>
Thu, 4 Jun 2015 10:43:14 +0000 (11:43 +0100)
We are permitted to write from beyond EOF, but a read from beyond EOF must
return 0

Kernel/inode.c

index c7c3b57..d7bfabb 100644 (file)
@@ -26,9 +26,12 @@ void readi(inoptr ino, uint8_t flag)
        case F_REG:
 
                /* See if end of file will limit read */
-
-               udata.u_count = min(udata.u_count,
+               if (ino->c_node.i_size <= udata.u_offset)
+                       udata.u_count = 0;
+                else {
+                       udata.u_count = min(udata.u_count,
                                ino->c_node.i_size - udata.u_offset);
+                }
                toread = udata.u_count;
                goto loop;