Blame SOURCES/0059-grub-core-fs-ufs.c-grub_ufs_dir-Stop-if-direntlen-is.patch

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