nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

Blame SOURCES/0251-util-grub-setup.c-setup-Handle-some-corner-cases.patch

f96e0b
From fad6a3928fd73156c9a861e6b8b81b4099e450a3 Mon Sep 17 00:00:00 2001
f96e0b
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
f96e0b
Date: Thu, 4 Apr 2013 08:55:06 +0200
f96e0b
Subject: [PATCH 251/482] 	* util/grub-setup.c (setup): Handle some
f96e0b
 corner cases.
f96e0b
f96e0b
---
f96e0b
 ChangeLog         | 4 ++++
f96e0b
 util/grub-setup.c | 8 ++++++--
f96e0b
 2 files changed, 10 insertions(+), 2 deletions(-)
f96e0b
f96e0b
diff --git a/ChangeLog b/ChangeLog
f96e0b
index 467a621..8a3fd45 100644
f96e0b
--- a/ChangeLog
f96e0b
+++ b/ChangeLog
f96e0b
@@ -1,5 +1,9 @@
f96e0b
 2013-04-04  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
 
f96e0b
+	* util/grub-setup.c (setup): Handle some corner cases.
f96e0b
+
f96e0b
+2013-04-04  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
+
f96e0b
 	* grub-core/lib/posix_wrap/locale.h [GRUB_UTIL]: Include host locale.h.
f96e0b
 
f96e0b
 2013-04-03  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
diff --git a/util/grub-setup.c b/util/grub-setup.c
f96e0b
index 5a7a857..27a815f 100644
f96e0b
--- a/util/grub-setup.c
f96e0b
+++ b/util/grub-setup.c
f96e0b
@@ -256,7 +256,7 @@ setup (const char *dir,
f96e0b
   grub_device_t root_dev = 0, dest_dev, core_dev;
f96e0b
   struct blocklists bl;
f96e0b
   char *tmp_img;
f96e0b
-  grub_disk_addr_t first_sector;
f96e0b
+  grub_disk_addr_t first_sector = (grub_disk_addr_t)-1;
f96e0b
   FILE *fp;
f96e0b
 
f96e0b
 #ifdef GRUB_SETUP_BIOS
f96e0b
@@ -756,6 +756,8 @@ unable_to_embed:
f96e0b
 	  grub_util_error ("%s", _("blocksize is not divisible by 512"));
f96e0b
 	mul = bsize >> GRUB_DISK_SECTOR_BITS;
f96e0b
 	nblocks = (core_size + bsize - 1) / bsize;
f96e0b
+	if (mul == 0 || nblocks == 0)
f96e0b
+	  grub_util_error ("%s", _("can't retrieve blocklists"));
f96e0b
 	for (i = 0; i < nblocks; i++)
f96e0b
 	  {
f96e0b
 	    unsigned blk = i;
f96e0b
@@ -808,7 +810,7 @@ unable_to_embed:
f96e0b
 			      - j * GRUB_DISK_SECTOR_SIZE);
f96e0b
 		if (len > GRUB_DISK_SECTOR_SIZE)
f96e0b
 		  len = GRUB_DISK_SECTOR_SIZE;
f96e0b
-		if (i == 0 && j == 0)
f96e0b
+		if (first_sector == (grub_disk_addr_t)-1)
f96e0b
 		  save_first_sector ((fie2->fm_extents[i].fe_physical
f96e0b
 				      >> GRUB_DISK_SECTOR_BITS)
f96e0b
 				     + j + container_start,
f96e0b
@@ -825,6 +827,8 @@ unable_to_embed:
f96e0b
 
f96e0b
 	      }
f96e0b
 	  }
f96e0b
+	if (first_sector == (grub_disk_addr_t)-1)
f96e0b
+	  grub_util_error ("%s", _("can't retrieve blocklists"));
f96e0b
       }
f96e0b
     fclose (fp);
f96e0b
   }
f96e0b
-- 
f96e0b
1.8.2.1
f96e0b