a5bd9f6
From 5361431d3faa4ddbbd5d5c6a1fa10e0cebc60623 Mon Sep 17 00:00:00 2001
a5bd9f6
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
a5bd9f6
Date: Mon, 10 Dec 2012 09:22:40 +0100
a5bd9f6
Subject: [PATCH 058/364] 	* grub-core/fs/ufs.c (grub_ufs_dir): Stop if
a5bd9f6
 direntlen is 0 to avoid 	infinite loop on corrupted FS.
a5bd9f6
a5bd9f6
---
a5bd9f6
 ChangeLog          | 5 +++++
a5bd9f6
 grub-core/fs/ufs.c | 3 +++
a5bd9f6
 2 files changed, 8 insertions(+)
a5bd9f6
a5bd9f6
diff --git a/ChangeLog b/ChangeLog
a5bd9f6
index 9c6dde5..0b1596a 100644
a5bd9f6
--- a/ChangeLog
a5bd9f6
+++ b/ChangeLog
a5bd9f6
@@ -1,3 +1,8 @@
a5bd9f6
+2012-12-10  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
+
a5bd9f6
+	* grub-core/fs/ufs.c (grub_ufs_dir): Stop if direntlen is 0 to avoid
a5bd9f6
+	infinite loop on corrupted FS.
a5bd9f6
+
a5bd9f6
 2012-12-08  Vladimir Serbinenko  <phcoder@gmail.com>
a5bd9f6
 
a5bd9f6
 	Fix big-endian mtime.
a5bd9f6
diff --git a/grub-core/fs/ufs.c b/grub-core/fs/ufs.c
a5bd9f6
index c862336..74a4a40 100644
a5bd9f6
--- a/grub-core/fs/ufs.c
a5bd9f6
+++ b/grub-core/fs/ufs.c
a5bd9f6
@@ -664,6 +664,9 @@ grub_ufs_dir (grub_device_t device, const char *path,
a5bd9f6
 			      (char *) &dirent) < 0)
a5bd9f6
 	break;
a5bd9f6
 
a5bd9f6
+      if (dirent.direntlen == 0)
a5bd9f6
+	break;
a5bd9f6
+
a5bd9f6
 #ifdef MODE_UFS2
a5bd9f6
       namelen = dirent.namelen_bsd;
a5bd9f6
 #else
a5bd9f6
-- 
a5bd9f6
1.8.1.4
a5bd9f6