From 20a572532bd9747c1ea02f3d45a0037242c3ed3c Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Sat, 28 Nov 2020 07:41:07 +0500 Subject: [PATCH] Multiboot 2 tags are aligned --- src/multiboot2/is_valid.c | 3 +-- src/multiboot2/print.c | 3 +-- tests/test_multiboot2_validation.c | 12 ++++++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/multiboot2/is_valid.c b/src/multiboot2/is_valid.c index 985a0a0..88700d7 100644 --- a/src/multiboot2/is_valid.c +++ b/src/multiboot2/is_valid.c @@ -24,8 +24,7 @@ unsigned char KernAux_Multiboot2_is_valid( } tag_base = (struct KernAux_Multiboot2_TagBase*)( - (void*)tag_base + - tag_base->size + (void*)tag_base + ((tag_base->size + 7) & ~7) ); } diff --git a/src/multiboot2/print.c b/src/multiboot2/print.c index 1c6ef32..965b00e 100644 --- a/src/multiboot2/print.c +++ b/src/multiboot2/print.c @@ -80,8 +80,7 @@ void KernAux_Multiboot2_print( KernAux_Multiboot2_TagBase_print(tag_base, print); tag_base = (struct KernAux_Multiboot2_TagBase*)( - (void*)tag_base + - tag_base->size + (void*)tag_base + ((tag_base->size + 7) & ~7) ); } } diff --git a/tests/test_multiboot2_validation.c b/tests/test_multiboot2_validation.c index 9554e7d..e329a16 100644 --- a/tests/test_multiboot2_validation.c +++ b/tests/test_multiboot2_validation.c @@ -516,10 +516,11 @@ static const struct { struct KernAux_Multiboot2 multiboot2; struct KernAux_Multiboot2_Tag_BasicMemoryInfo tag_basic_memory_info; struct KernAux_Multiboot2_Tag_BIOSBootDevice tag_bios_boot_device; + unsigned char _align1[4]; struct KernAux_Multiboot2_Tag_None tag_none; } multiboot2_with_more_additional_tags_valid = { .multiboot2 = { - .total_size = 8 + 16 + 20 + 8, + .total_size = 8 + 16 + (20 + 4) + 8, .reserved1 = 0, }, .tag_basic_memory_info = { @@ -591,10 +592,11 @@ static const struct { struct KernAux_Multiboot2_Tag_BasicMemoryInfo tag_basic_memory_info; struct KernAux_Multiboot2_Tag_None tag_none1; struct KernAux_Multiboot2_Tag_BIOSBootDevice tag_bios_boot_device; + unsigned char _align1[4]; struct KernAux_Multiboot2_Tag_None tag_none2; } multiboot2_with_early_none_tag_invalid = { .multiboot2 = { - .total_size = 8 + 16 + 8 + 20 + 8, + .total_size = 8 + 16 + 8 + (20 + 4) + 8, .reserved1 = 0, }, .tag_basic_memory_info = { @@ -632,10 +634,11 @@ static const struct { struct KernAux_Multiboot2 multiboot2; struct KernAux_Multiboot2_Tag_BasicMemoryInfo tag_basic_memory_info; struct KernAux_Multiboot2_Tag_BIOSBootDevice tag_bios_boot_device; + unsigned char _align1[4]; struct KernAux_Multiboot2_Tag_None tag_none; } multiboot2_with_more_additional_tags_invalid_size_too_big = { .multiboot2 = { - .total_size = 8 + 16 + 20 + 8 + 1, + .total_size = 8 + 16 + (20 + 4) + 8 + 1, .reserved1 = 0, }, .tag_basic_memory_info = { @@ -667,10 +670,11 @@ static const struct { struct KernAux_Multiboot2 multiboot2; struct KernAux_Multiboot2_Tag_BasicMemoryInfo tag_basic_memory_info; struct KernAux_Multiboot2_Tag_BIOSBootDevice tag_bios_boot_device; + unsigned char _align1[4]; struct KernAux_Multiboot2_Tag_None tag_none; } multiboot2_with_more_additional_tags_invalid_size_too_small = { .multiboot2 = { - .total_size = 8 + 16 + 20 + 8 - 1, + .total_size = 8 + 16 + (20 + 4) + 8 - 1, .reserved1 = 0, }, .tag_basic_memory_info = {