diff --git a/hypervisor/boot/boot.c b/hypervisor/boot/boot.c index 5fd6272dd..0d3c2a975 100644 --- a/hypervisor/boot/boot.c +++ b/hypervisor/boot/boot.c @@ -45,11 +45,11 @@ int32_t sanitize_acrn_boot_info(struct acrn_boot_info *abi) } #endif - if (abi->mi_loader_name[0] == '\0') { + if (abi->loader_name[0] == '\0') { pr_err("no bootloader name found!"); abi_status = -EINVAL; } else { - printf("%s Bootloader: %s\n", boot_protocol_name, abi->mi_loader_name); + printf("%s Bootloader: %s\n", boot_protocol_name, abi->loader_name); } return abi_status; diff --git a/hypervisor/boot/include/boot.h b/hypervisor/boot/include/boot.h index 3ea421f54..2fbebc569 100644 --- a/hypervisor/boot/include/boot.h +++ b/hypervisor/boot/include/boot.h @@ -15,6 +15,7 @@ #define MAX_MMAP_ENTRIES 32U #define MAX_BOOTARGS_SIZE 2048U +#define MAX_LOADER_NAME_SIZE 32U /* The modules in multiboot are: Pre-launched VM: kernel/ramdisk/acpi; SOS VM: kernel/ramdisk */ #define MAX_MODULE_NUM (3U * PRE_VM_NUM + 2U * SOS_VM_NUM) @@ -25,14 +26,11 @@ struct acrn_boot_info { const char cmdline[MAX_BOOTARGS_SIZE]; - const char *mi_loader_name; + const char loader_name[MAX_LOADER_NAME_SIZE]; uint32_t mi_mods_count; struct multiboot_module mi_mods[MAX_MODULE_NUM]; - uint32_t mi_drives_length; - uint32_t mi_drives_addr; - uint32_t mi_mmap_entries; struct multiboot_mmap mi_mmap_entry[MAX_MMAP_ENTRIES]; diff --git a/hypervisor/boot/multiboot/multiboot.c b/hypervisor/boot/multiboot/multiboot.c index e2bd11ab9..e6c974ee2 100644 --- a/hypervisor/boot/multiboot/multiboot.c +++ b/hypervisor/boot/multiboot/multiboot.c @@ -21,7 +21,10 @@ int32_t multiboot_to_acrn_bi(struct acrn_boot_info *abi, void *mb_info) { (void)strncpy_s((void *)(abi->cmdline), MAX_BOOTARGS_SIZE, (char *)hpa2hva_early((uint64_t)mbi->mi_cmdline), strnlen_s((char *)hpa2hva_early((uint64_t)mbi->mi_cmdline), (MAX_BOOTARGS_SIZE - 1U))); - abi->mi_loader_name = (char *)hpa2hva_early((uint64_t)mbi->mi_loader_name); + (void)strncpy_s((void *)(abi->loader_name), MAX_LOADER_NAME_SIZE, + (char *)hpa2hva_early((uint64_t)mbi->mi_loader_name), + strnlen_s((char *)hpa2hva_early((uint64_t)mbi->mi_loader_name), (MAX_LOADER_NAME_SIZE - 1U))); + abi->mi_mmap_entries = mbi->mi_mmap_length / sizeof(struct multiboot_mmap); abi->mi_mods_count = mbi->mi_mods_count; diff --git a/hypervisor/boot/multiboot/multiboot2.c b/hypervisor/boot/multiboot/multiboot2.c index 03d7a04eb..f20459702 100644 --- a/hypervisor/boot/multiboot/multiboot2.c +++ b/hypervisor/boot/multiboot/multiboot2.c @@ -98,7 +98,9 @@ int32_t multiboot2_to_acrn_bi(struct acrn_boot_info *abi, void *mb2_info) mod_idx++; break; case MULTIBOOT2_TAG_TYPE_BOOT_LOADER_NAME: - abi->mi_loader_name = ((struct multiboot2_tag_string *)mb2_tag)->string; + str = ((struct multiboot2_tag_string *)mb2_tag)->string; + (void)strncpy_s((void *)(abi->loader_name), MAX_LOADER_NAME_SIZE, str, + strnlen_s(str, (MAX_LOADER_NAME_SIZE - 1U))); break; case MULTIBOOT2_TAG_TYPE_ACPI_NEW: abi->mi_acpi_rsdp_va = ((struct multiboot2_tag_new_acpi *)mb2_tag)->rsdp;