]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
grub_ata_setaddress: Check that geometry is sane when using CHS addressing.
authorVladimir Serbinenko <phcoder@gmail.com>
Tue, 20 Jan 2015 13:16:22 +0000 (14:16 +0100)
committerVladimir Serbinenko <phcoder@gmail.com>
Wed, 21 Jan 2015 16:42:10 +0000 (17:42 +0100)
ChangeLog
grub-core/disk/ata.c

index 0c85b35b4958c631ff59807da0658b103bd92009..575bd18bed5cea5dc809594587ee9f457575c644 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-01-20  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/disk/ata.c (grub_ata_setaddress): Check that geometry
+       is sane when using CHS addressing.
+
 2015-01-20  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/disk/AFSplitter.c (AF_merge): Check that mdlen is not 0.
index 2b988490ff7194441916c326b568ddfaf5d5e5f3..8ba4e5c5033e84d5600807e8a24ef4c7a2aeb818 100644 (file)
@@ -216,6 +216,12 @@ grub_ata_setaddress (struct grub_ata *dev,
        unsigned int head;
        unsigned int sect;
 
+       if (dev->sectors_per_track == 0
+           || dev->heads == 0)
+         return grub_error (GRUB_ERR_OUT_OF_RANGE,
+                            "sector %d cannot be addressed "
+                            "using CHS addressing", sector);
+
        /* Calculate the sector, cylinder and head to use.  */
        sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
        cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)