protos/multiboot2: Guard max_addr - length underflow in relocation preference
diff --git a/common/protos/multiboot2.c b/common/protos/multiboot2.c
index 38d699fc..7804d13f 100644
--- a/common/protos/multiboot2.c
+++ b/common/protos/multiboot2.c
@@ -386,6 +386,9 @@ noreturn void multiboot2_load(char *config, char* cmdline) {
break;
case 2: // Prefer highest
reloc_ascend = false;
+ if (ranges->length > reloc_tag.max_addr) {
+ goto reloc_fail;
+ }
relocated_base = ALIGN_DOWN(reloc_tag.max_addr - ranges->length, reloc_tag.align);
if (relocated_base < reloc_tag.min_addr) {
goto reloc_fail;
