]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
fs/hfsplus: Don't fetch a key beyond the end of the node
authorDaniel Axtens <dja@axtens.net>
Fri, 22 Jan 2021 07:13:56 +0000 (18:13 +1100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Tue, 2 Mar 2021 14:54:18 +0000 (15:54 +0100)
Otherwise you get a wild pointer, leading to a bunch of invalid reads.
Check it falls inside the given node.

Signed-off-by: Daniel Axtens <dja@axtens.net>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/fs/hfsplus.c

index 8fe7c12ed8073742f46c543a558a0bdddf90fa81..1c7791b027e8a2440ae73a32ef1b5c096f14af71 100644 (file)
@@ -635,6 +635,10 @@ grub_hfsplus_btree_search (struct grub_hfsplus_btree *btree,
              pointer = ((char *) currkey
                         + grub_be_to_cpu16 (currkey->keylen)
                         + 2);
+
+             if ((char *) pointer > node + btree->nodesize - 2)
+               return grub_error (GRUB_ERR_BAD_FS, "HFS+ key beyond end of node");
+
              currnode = grub_be_to_cpu32 (grub_get_unaligned32 (pointer));
              match = 1;
            }