On Fri, Oct 02, 2026 at 08:31:52PM -0300, Jason Gunthorpe wrote:
> +efi_status_t efi_drtm_prepare_launch(unsigned long image_base,
> +                                  unsigned long fdt_addr)
> +{
> +     const struct arm64_image_header *header = (const void *)image_base;
> +     const struct efi_image_info *info = efi_get_image_info(image_base);
> +     struct arm64_drtm_handoff *handoff =
> +             efi_get_image_symbol(image_base, arm64_drtm_handoff);
> +     struct arm_drtm_parameters *params;
> +     unsigned long measured_offset;
> +     unsigned long measured_size;
> +     unsigned long image_size;
> +     unsigned long dlme_start;
> +     unsigned long dlme_end;
> +     unsigned long dce_end;
> +     unsigned long entry;
> +
> +     if (efi_drtm_policy == EFI_DRTM_OFF)
> +             return EFI_SUCCESS;
> +
> +     image_size = le64_to_cpu(header->image_size);

We've been able to do some testing with UKIs now and this line doesn't
work with systemd's PE loader, it discards the PE headers. The stub
already has a comment about this:

        /*
         * When built as part of the kernel, the EFI stub cannot branch to the
         * kernel proper via the image header, as the PE/COFF header is
         * strictly not part of the in-memory presentation of the image, only
         * of the file representation. So instead, we need to jump to the
         * actual entrypoint in the .text region of the image.
         */

I will fix this by passing the image_size through the efi_image_info
instead.

Jason

Reply via email to