From 2cc1b23d4890ac13658f4852078beeecbf0d9a74 Mon Sep 17 00:00:00 2001 From: Murai Takashi Date: Thu, 30 Sep 2021 21:07:52 +0900 Subject: [PATCH] boot/platform/efi/arch/x86_64: fix -Warray-bounds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Size of gBootGDT[] is 'USER_DATA_SEGMENT + 1' defined at line 26, and it equals USER_CODE_SEGMENT, so gBootGDT[USER_CODE_SEGMENT] is out of bounds at line 44. Change-Id: I1374f4d1185b6a47f910ac128d49a07cdd80d925 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4536 Reviewed-by: Jérôme Duval --- src/system/boot/platform/efi/arch/x86_64/arch_mmu.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/system/boot/platform/efi/arch/x86_64/arch_mmu.cpp b/src/system/boot/platform/efi/arch/x86_64/arch_mmu.cpp index bc6eb69aa2..d166ddf085 100644 --- a/src/system/boot/platform/efi/arch/x86_64/arch_mmu.cpp +++ b/src/system/boot/platform/efi/arch/x86_64/arch_mmu.cpp @@ -22,10 +22,6 @@ #include "efi_platform.h" -#undef BOOT_GDT_SEGMENT_COUNT -#define BOOT_GDT_SEGMENT_COUNT (USER_DATA_SEGMENT + 1) - - extern uint64 gLongGDT; extern uint64 gLongGDTR; segment_descriptor gBootGDT[BOOT_GDT_SEGMENT_COUNT]; @@ -34,6 +30,11 @@ segment_descriptor gBootGDT[BOOT_GDT_SEGMENT_COUNT]; static void long_gdt_init() { + STATIC_ASSERT(BOOT_GDT_SEGMENT_COUNT > KERNEL_CODE_SEGMENT + && BOOT_GDT_SEGMENT_COUNT > KERNEL_DATA_SEGMENT + && BOOT_GDT_SEGMENT_COUNT > USER_CODE_SEGMENT + && BOOT_GDT_SEGMENT_COUNT > USER_DATA_SEGMENT); + clear_segment_descriptor(&gBootGDT[0]); // Set up code/data segments (TSS segments set up later in the kernel).