]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/ufs.c (grub_ufs_dir): Stop if direntlen is 0 to avoid
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 10 Dec 2012 08:22:40 +0000 (09:22 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 10 Dec 2012 08:22:40 +0000 (09:22 +0100)
infinite loop on corrupted FS.

ChangeLog
grub-core/fs/ufs.c

index 9c6dde54d718c6e8cb4a77ddb76c7a9b75224622..0b1596acdaaed6ab9a533f40ff4c28d42a80d8fb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-12-10  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/ufs.c (grub_ufs_dir): Stop if direntlen is 0 to avoid
+       infinite loop on corrupted FS.
+
 2012-12-08  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Fix big-endian mtime.
index c8623367458ba6347185943ad92f0344a9be645f..74a4a40022cd436d5aed7d7a8b54832aa581103b 100644 (file)
@@ -664,6 +664,9 @@ grub_ufs_dir (grub_device_t device, const char *path,
                              (char *) &dirent) < 0)
        break;
 
+      if (dirent.direntlen == 0)
+       break;
+
 #ifdef MODE_UFS2
       namelen = dirent.namelen_bsd;
 #else