Binary release v2.1
diff --git a/BOOTX64.EFI b/BOOTX64.EFI
index 5efa63b0..64efdb41 100755
Binary files a/BOOTX64.EFI and b/BOOTX64.EFI differ
diff --git a/limine-cd.bin b/limine-cd.bin
index 29594a16..342aba38 100644
Binary files a/limine-cd.bin and b/limine-cd.bin differ
diff --git a/limine-eltorito-efi.bin b/limine-eltorito-efi.bin
index 0ec68c71..54f65d61 100644
Binary files a/limine-eltorito-efi.bin and b/limine-eltorito-efi.bin differ
diff --git a/limine-hdd.bin b/limine-hdd.bin
index 335bb5d0..5934172b 100644
Binary files a/limine-hdd.bin and b/limine-hdd.bin differ
diff --git a/limine-install-linux-x86_32 b/limine-install-linux-x86_32
index 0f92066b..38831466 100755
Binary files a/limine-install-linux-x86_32 and b/limine-install-linux-x86_32 differ
diff --git a/limine-install-linux-x86_64 b/limine-install-linux-x86_64
index 8b6d1a4a..af89436c 100755
Binary files a/limine-install-linux-x86_64 and b/limine-install-linux-x86_64 differ
diff --git a/limine-install-win32.exe b/limine-install-win32.exe
index daeab4e7..1dfc67c9 100755
Binary files a/limine-install-win32.exe and b/limine-install-win32.exe differ
diff --git a/limine-install.c b/limine-install.c
index 15832164..022dc7f9 100644
--- a/limine-install.c
+++ b/limine-install.c
@@ -329,6 +329,55 @@ int main(int argc, char *argv[]) {
}
}
+ int mbr = 0;
+ if (gpt == 0) {
+ // Do all sanity checks on MBR
+ mbr = 1;
+
+ uint16_t hint = 0;
+ device_read(&hint, 218, sizeof(uint16_t));
+ if (hint != 0)
+ mbr = 0;
+
+ device_read(&hint, 444, sizeof(uint16_t));
+ if (hint != 0 && hint != 0x5a5a)
+ mbr = 0;
+
+ device_read(&hint, 510, sizeof(uint16_t));
+ if (hint != 0xaa55)
+ mbr = 0;
+
+ device_read(&hint, 446, sizeof(uint8_t));
+ if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80)
+ mbr = 0;
+ device_read(&hint, 462, sizeof(uint8_t));
+ if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80)
+ mbr = 0;
+ device_read(&hint, 478, sizeof(uint8_t));
+ if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80)
+ mbr = 0;
+ device_read(&hint, 494, sizeof(uint8_t));
+ if ((uint8_t)hint != 0x00 && (uint8_t)hint != 0x80)
+ mbr = 0;
+
+ char hintc[64];
+ device_read(hintc, 4, 8);
+ if (memcmp(hintc, "_ECH_FS_", 8) == 0)
+ mbr = 0;
+ device_read(hintc, 54, 3);
+ if (memcmp(hintc, "FAT", 3) == 0)
+ mbr = 0;
+ device_read(&hint, 1080, sizeof(uint16_t));
+ if (hint == 0xef53)
+ mbr = 0;
+ }
+
+ if (gpt == 0 && mbr == 0) {
+ fprintf(stderr, "ERROR: Could not determine if the device has a valid partition table.\n");
+ fprintf(stderr, " Please ensure the device has a valid MBR or GPT.\n");
+ goto cleanup;
+ }
+
size_t stage2_size = bootloader_file_size - 512;
size_t stage2_sects = DIV_ROUNDUP(stage2_size, 512);
diff --git a/limine-pxe.bin b/limine-pxe.bin
index 231bb37e..841f131a 100644
Binary files a/limine-pxe.bin and b/limine-pxe.bin differ
diff --git a/limine.sys b/limine.sys
index 8772ef19..87b3a026 100755
Binary files a/limine.sys and b/limine.sys differ
