]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-01-15 Robert Millan <rmh@aybabtu.com>
authorrobertmh <robertmh@localhost>
Tue, 15 Jan 2008 12:13:45 +0000 (12:13 +0000)
committerrobertmh <robertmh@localhost>
Tue, 15 Jan 2008 12:13:45 +0000 (12:13 +0000)
        * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Obtain
        actual size of `available' from grub_ieee1275_get_property(), and
        restrict parsing to that bound.

ChangeLog
kern/powerpc/ieee1275/openfw.c

index 7dbc19d9e6a9ed03906a0f0b20a310c6247ead7a..e12a1d731f30cfa8d302878350e199dd73c84db8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-15  Robert Millan  <rmh@aybabtu.com>
+
+       * kern/powerpc/ieee1275/openfw.c (grub_available_iterate): Obtain
+       actual size of `available' from grub_ieee1275_get_property(), and
+       restrict parsing to that bound.
+
 2008-01-15  Christian Franke  <franke@computer.org>
 
        * util/grub-emu.c: Replace <argp.h> by <getopt.h>.
index d8f7189afed6a5df8dd8ebf40d10a4ee31540504..af42eadea95f301593f856489b3d68d3cec0d875 100644 (file)
@@ -141,6 +141,7 @@ grub_err_t grub_available_iterate (int (*hook) (grub_uint64_t, grub_uint64_t))
   grub_ieee1275_phandle_t root;
   grub_ieee1275_phandle_t memory;
   grub_uint32_t available[32];
+  grub_ssize_t available_size;
   int address_cells = 1;
   int size_cells = 1;
   unsigned int i;
@@ -157,13 +158,14 @@ grub_err_t grub_available_iterate (int (*hook) (grub_uint64_t, grub_uint64_t))
     return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
                       "Couldn't find /memory node");
   if (grub_ieee1275_get_property (memory, "available", available,
-                                 sizeof available, 0))
+                                 sizeof available, &available_size))
     return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
                       "Couldn't examine /memory/available property");
 
   /* Decode each entry and call `hook'.  */
   i = 0;
-  while (i < sizeof (available))
+  available_size /= sizeof (grub_uint32_t);
+  while (i < available_size)
     {
       grub_uint64_t address;
       grub_uint64_t size;