EFI File Path Media Device Path is defined as NULL terminated string;
but chainloader built file paths without final NULL. This caused error
with Secure Boot and Linux Foundation PreLoader on Acer with InsydeH20 BIOS.
Apparently firmware failed verification with EFI_INVALID_PARAMETER which is
considered fatal error by PreLoader.
Reported and tested by Giovanni Santini <itachi.sama.amaterasu@gmail.com>
if (*p == '/')
*p = '\\';
+ /* File Path is NULL terminated */
+ fp->path_name[size++] = '\0';
fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
}
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
}
+ /* File Path is NULL terminated. Allocate space for 2 extra characters */
+ /* FIXME why we split path in two components? */
file_path = grub_malloc (size
- + ((grub_strlen (dir_start) + 1)
+ + ((grub_strlen (dir_start) + 2)
* GRUB_MAX_UTF16_PER_UTF8
* sizeof (grub_efi_char16_t))
+ sizeof (grub_efi_file_path_device_path_t) * 2);