|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 4/5] efi: Enable booting unified hypervisor/kernel/initrd images
On 21.09.2020 13:51, Trammell Hudson wrote:
> @@ -624,6 +626,22 @@ static bool __init read_file(EFI_FILE_HANDLE dir_handle,
> CHAR16 *name,
> return true;
> }
>
> +static bool __init read_section(const EFI_LOADED_IMAGE *image,
> + CHAR16 *name, struct file *file,
> + const char *options)
> +{
> + file->ptr = pe_find_section(image->ImageBase, image->ImageSize,
> + name, &file->size);
> + if ( !file->ptr )
> + return false;
> +
> + file->need_to_free = false;
In patch 2 you don't bother clearing the field, presumably because
it's static data and hence zero-filled anyway. This same assumption
would then hold here. Or else, to be consistent, the earlier patch
would want clearing added.
> +static int __init pe_name_compare(const struct PeSectionHeader *sect,
> + const CHAR16 *name)
> +{
> + size_t i;
> +
> + if ( sect->Name[0] != '.' )
> + return -1;
> +
> + for ( i = 1; i < sizeof(sect->Name); i++ )
> + {
> + const char c = sect->Name[i];
> + const CHAR16 cw = name[i-1];
> + if ( cw == 0 && c == 0 )
Blank line between declarations and statements please.
> + return 0;
> + if ( cw < c )
> + return -1;
> + if ( cw > c )
> + return +1;
> + }
> +
> + if ( name[i-1] < 0 )
> + return -1;
I'm afraid this is liable to trigger compiler warnings, for checking
an unsigned quantity to be negative.
Also throughout here "i-1" wants spelling "i - 1".
> +const void *__init pe_find_section(const void *image, const UINTN image_size,
> + const CHAR16 *section_name, UINTN
> *size_out)
> +{
> + const struct DosFileHeader *dos = image;
> + const struct PeHeader *pe;
> + const struct PeSectionHeader *sect;
> + UINTN offset, i;
> +
> + if ( image_size < sizeof(*dos) ||
> + memcmp(dos->Magic, "MZ", 2) != 0 )
> + return NULL;
> +
> + offset = dos->ExeHeader;
> + pe = image + offset;
> +
> + offset += sizeof(*pe);
> + if ( image_size < offset ||
> + memcmp(pe->Magic, "PE\0\0", 4) != 0 )
> + return NULL;
> +
> + /* PE32+ Subsystem type */
> + if ( pe->FileHeader.Machine != PE_HEADER_MACHINE )
> + return NULL;
Comment and code don't look to be in line.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |