Re: [PATCH v3] efi: Request desired alignment via the PE/COFF headers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 15/06/15 22:43, Linn Crosetto wrote:
Michael Brown <mbrown@...> writes:
The kernel will align itself to the nearest boundary specified by the
kernel_alignment field in the bzImage header.  If the kernel is loaded
to an address which is not sufficiently aligned, it will therefore use
memory beyond that indicated solely by the init_size field.

The PE/COFF headers now include a .bss section to describe the
requirements of the init_size field, but do not currently expose the
alignment requirement.  Consequently, a kernel loaded via the PE entry
point may still end up overwriting unexpected areas of memory.

Fix by exposing the desired alignment via the SectionAlignment field
in the PE/COFF headers.  Despite its name, this field provides an
overall alignment requirement for the loaded file.  (Naturally, the
FileAlignment field describes the alignment for individual sections.)

There is no way in the PE/COFF headers to express the concept of
min_alignment; we therefore do not expose the minimum (as opposed to
preferred) alignment.

<snip>

There may be a problem with this change. The specification says that the
SizeOfImage field must be a multiple of SectionAlignment. That was the case
when SectionAlignment was 0x20, but now that it is so large it would
require quite an increase in the last section to comply. A kernel I am
looking at now has:

Alignment of sections:	0x1000000
Size of image:	0x105a000

Any suggested solution?

Michael
--
To unsubscribe from this list: send the line "unsubscribe linux-efi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux