diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 9f835725247eaae1b96250b3c2b14eadcd34e980..87a1623d19682d579daef033482841359d1c62c3 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -207,8 +207,8 @@ static __u32 get_fatent(fsdata *mydata, __u32 entry)
 		__u32 fatlength = mydata->fatlength;
 		__u32 startblock = bufnum * FATBUFBLOCKS;
 
-		if (getsize > fatlength)
-			getsize = fatlength;
+		if (startblock + getsize > fatlength)
+			getsize = fatlength - startblock;
 
 		fatlength *= mydata->sect_size;	/* We want it in bytes now */
 		startblock += mydata->fat_sect;	/* Offset from start of disk */