]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/bfs.c: MAcroify and add some necessary sanity checks.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 30 Oct 2011 13:17:44 +0000 (14:17 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 30 Oct 2011 13:17:44 +0000 (14:17 +0100)
ChangeLog
grub-core/fs/bfs.c

index c52bff5b9e6e89c1fd68c7155c465f1cfa5eb68f..8ff87aebd4afac50d9e6e45168256f708092187d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-10-30  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/bfs.c: MAcroify and add some necessary sanity checks.
+
 2011-10-30  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/fs/bfs.c: Run indent.
index 7b6e359ae428d3e15a41b8e0c267cf96cafe7ffa..c16a50f397f2e2fddb8c1c792a5e5a78a018feaf 100644 (file)
@@ -146,7 +146,8 @@ read_extent (grub_disk_t disk,
   return grub_disk_read (disk, ((grub_bfs_to_cpu32 (in->ag)
                                 << grub_bfs_to_cpu32 (sb->log2_ag_size))
                                + grub_bfs_to_cpu16 (in->start) + off)
-                        << (grub_bfs_to_cpu32 (sb->log2_bsize) - 9), byteoff,
+                        << (grub_bfs_to_cpu32 (sb->log2_bsize)
+                            - GRUB_DISK_SECTOR_BITS), byteoff,
                         len, buf);
 }
 
@@ -383,7 +384,8 @@ iterate_in_b_tree (grub_disk_t disk,
                           + ALIGN_UP (sizeof (node) +
                                       grub_bfs_to_cpu16 (node.total_key_len),
                                       8) +
-                          grub_bfs_to_cpu16 (node.count_keys) * 2,
+                          grub_bfs_to_cpu16 (node.count_keys)
+                          * sizeof (grub_uint64_t),
                           &key_value, sizeof (grub_uint64_t), 0);
       if (err)
        return 0;
@@ -415,7 +417,8 @@ iterate_in_b_tree (grub_disk_t disk,
                                         grub_bfs_to_cpu16 (node.
                                                            total_key_len),
                                         8), keylen_idx,
-                            grub_bfs_to_cpu16 (node.count_keys) * 2, 0);
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint16_t), 0);
        if (err)
          return 0;
        err = read_bfs_file (disk, sb, ino, node_off
@@ -423,9 +426,11 @@ iterate_in_b_tree (grub_disk_t disk,
                                         grub_bfs_to_cpu16 (node.
                                                            total_key_len),
                                         8) +
-                            grub_bfs_to_cpu16 (node.count_keys) * 2,
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint16_t),
                             key_values,
-                            grub_bfs_to_cpu16 (node.count_keys) * 8, 0);
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint64_t), 0);
        if (err)
          return 0;
 
@@ -434,6 +439,8 @@ iterate_in_b_tree (grub_disk_t disk,
            char c;
            start = end;
            end = grub_bfs_to_cpu16 (keylen_idx[i]);
+           if (grub_bfs_to_cpu16 (node.total_key_len) <= end)
+             end = grub_bfs_to_cpu16 (node.total_key_len);
            c = key_data[end];
            key_data[end] = 0;
            if (hook (key_data + start, grub_bfs_to_cpu64 (key_values[i])))
@@ -490,7 +497,8 @@ find_in_b_tree (grub_disk_t disk,
                             ALIGN_UP (sizeof (node) +
                                       grub_bfs_to_cpu16 (node.total_key_len),
                                       8), keylen_idx,
-                            grub_bfs_to_cpu16 (node.count_keys) * 2, 0);
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint16_t), 0);
        if (err)
          return err;
        err = read_bfs_file (disk, sb, ino, node_off
@@ -498,9 +506,11 @@ find_in_b_tree (grub_disk_t disk,
                                         grub_bfs_to_cpu16 (node.
                                                            total_key_len),
                                         8) +
-                            grub_bfs_to_cpu16 (node.count_keys) * 2,
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint16_t),
                             key_values,
-                            grub_bfs_to_cpu16 (node.count_keys) * 8, 0);
+                            grub_bfs_to_cpu16 (node.count_keys)
+                            * sizeof (grub_uint64_t), 0);
        if (err)
          return err;
 
@@ -561,7 +571,8 @@ hop_level (grub_disk_t disk,
     return err;
 
   return grub_disk_read (disk, res
-                        << (grub_bfs_to_cpu32 (sb->log2_bsize) - 9), 0,
+                        << (grub_bfs_to_cpu32 (sb->log2_bsize)
+                            - GRUB_DISK_SECTOR_BITS), 0,
                         grub_bfs_to_cpu32 (sb->bsize), (char *) ino);
 }
 
@@ -718,7 +729,8 @@ grub_bfs_dir (grub_device_t device, const char *path,
     struct grub_dirhook_info info;
 
     err2 = grub_disk_read (device->disk, value
-                          << (grub_bfs_to_cpu32 (sb.log2_bsize) - 9), 0,
+                          << (grub_bfs_to_cpu32 (sb.log2_bsize)
+                              - GRUB_DISK_SECTOR_BITS), 0,
                           grub_bfs_to_cpu32 (sb.bsize), (char *) ino.raw);
     if (err2)
       {
@@ -877,7 +889,8 @@ read_bfs_attr (grub_disk_t disk,
       if (err)
        return -1;
       grub_disk_read (disk, res
-                     << (grub_bfs_to_cpu32 (sb->log2_bsize) - 9), 0,
+                     << (grub_bfs_to_cpu32 (sb->log2_bsize)
+                         - GRUB_DISK_SECTOR_BITS), 0,
                      grub_bfs_to_cpu32 (sb->bsize), (char *) &ino2);
       read = grub_bfs_to_cpu64 (ino2.ino.size);
       if (read > len)
@@ -916,7 +929,7 @@ grub_bfs_uuid (grub_device_t device, char **uuid)
     if (err)
       return err;
     if (read_bfs_attr (device->disk, &sb, &ino.ino, "be:volume_id",
-                      &vid, 8) == 8)
+                      &vid, sizeof (vid)) == sizeof (vid))
       *uuid =
        grub_xasprintf ("%016" PRIxGRUB_UINT64_T, grub_bfs_to_cpu64 (vid));
   }