1
0
mirror of https://github.com/systemd/systemd.git synced 2025-06-02 17:07:47 +03:00

ukify: Weaken file alignment assertions

Older versions of the stub are not aligned to the PE file alignment
size. If we remove the assertions, the UKI still boots without issues,
so let's drop the assertions and print a message about it instead.
This commit is contained in:
Daan De Meyer 2023-03-27 13:41:59 +02:00
parent ffa859388b
commit 23428bb19e

View File

@ -449,7 +449,7 @@ class PeError(Exception):
def pe_add_sections(uki: UKI, output: str):
pe = pefile.PE(uki.executable, fast_load=True)
assert len(pe.__data__) % pe.OPTIONAL_HEADER.FileAlignment == 0
assert pe.FILE_HEADER.PointerToSymbolTable != 0 or len(pe.__data__) % pe.OPTIONAL_HEADER.FileAlignment == 0
warnings = pe.get_warnings()
if warnings:
@ -460,6 +460,12 @@ def pe_add_sections(uki: UKI, output: str):
# We could strip the signatures, but why would anyone sign the stub?
raise PeError(f'Stub image is signed, refusing.')
# If the executable has not been stripped, it might not be aligned to a multiple of the file alignment so
# let's make sure it is by padding it.
if pe.FILE_HEADER.PointerToSymbolTable != 0:
padlen = round_up(len(pe.__data__), pe.OPTIONAL_HEADER.FileAlignment) - len(pe.__data__)
pe.__data__ = pe.__data__[:] + padlen * b'\0'
for section in uki.sections:
new_section = pefile.SectionStructure(pe.__IMAGE_SECTION_HEADER_format__, pe=pe)
new_section.__unpack__(b'\0' * new_section.sizeof())