Index: uspace/srv/fs/fat/fat_ops.c
===================================================================
--- uspace/srv/fs/fat/fat_ops.c	(revision 916bf1adc0fc4678d0a3a3b704a428ccc4e2c303)
+++ uspace/srv/fs/fat/fat_ops.c	(revision 0d974d806b8b5c4f97b311ccf8f25f582a4fc9ba)
@@ -539,9 +539,15 @@
 		 * requested. This keeps the code very simple.
 		 */
-		bytes = min(len, bps - pos % bps);
-		b = fat_block_get(bs, nodep, pos / bps);
-		(void) ipc_data_read_finalize(callid, b->data + pos % bps,
-		    bytes);
-		block_put(b);
+		if (pos >= nodep->size) {
+			bytes = 0;		/* reading beyond the EOF */
+			(void) ipc_data_read_finalize(callid, NULL, 0);
+		} else {
+			bytes = min(len, bps - pos % bps);
+			bytes = min(bytes, nodep->size - pos);
+			b = fat_block_get(bs, nodep, pos / bps);
+			(void) ipc_data_read_finalize(callid, b->data + pos % bps,
+			    bytes);
+			block_put(b);
+		}
 	} else {
 		unsigned bnum;
