From d8b3b60eeaa0eaf954316c2c81fa87d2430d3cb0 Mon Sep 17 00:00:00 2001
From: bean <bean@localhost>
Date: Sat, 7 Mar 2009 10:50:43 +0000
Subject: [PATCH] 2009-03-07  Bean  <bean123ch@gmail.com>

	* loader/i386/efi/linux.c (grub_rescue_cmd_initrd): Fix a bug in initrd
	allocation.
---
 ChangeLog               |  5 +++++
 loader/i386/efi/linux.c | 10 +++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5d81a1e42..2add04029 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-03-07  Bean  <bean123ch@gmail.com>
+
+	* loader/i386/efi/linux.c (grub_rescue_cmd_initrd): Fix a bug in initrd
+	allocation.
+
 2009-03-06  Robert Millan  <rmh@aybabtu.com>
 
 	Fix display issue on terminals with screen size other than 80x25
diff --git a/loader/i386/efi/linux.c b/loader/i386/efi/linux.c
index cd6f3a59f..60fa8823c 100644
--- a/loader/i386/efi/linux.c
+++ b/loader/i386/efi/linux.c
@@ -963,11 +963,15 @@ grub_rescue_cmd_initrd (int argc, char *argv[])
 	  if (physical_end > addr_max)
 	    physical_end = addr_max;
 
-          if (physical_end < addr_min)
+	  if (physical_end < page_align (size))
             continue;
 
-	  if (physical_end > addr)
-	    addr = physical_end - page_align (size);
+	  physical_end -= page_align (size);
+
+	  if ((physical_end >= addr_min) &&
+	      (physical_end >= desc->physical_start) &&
+	      (physical_end > addr))
+	    addr = physical_end;
 	}
     }