|
@@ -97,6 +97,16 @@ efi_status_t handle_kernel_image(efi_system_table_t *sys_table_arg,
|
|
|
u32 offset = !IS_ENABLED(CONFIG_DEBUG_ALIGN_RODATA) ?
|
|
|
(phys_seed >> 32) & mask : TEXT_OFFSET;
|
|
|
|
|
|
+ /*
|
|
|
+ * With CONFIG_RANDOMIZE_TEXT_OFFSET=y, TEXT_OFFSET may not
|
|
|
+ * be a multiple of EFI_KIMG_ALIGN, and we must ensure that
|
|
|
+ * we preserve the misalignment of 'offset' relative to
|
|
|
+ * EFI_KIMG_ALIGN so that statically allocated objects whose
|
|
|
+ * alignment exceeds PAGE_SIZE appear correctly aligned in
|
|
|
+ * memory.
|
|
|
+ */
|
|
|
+ offset |= TEXT_OFFSET % EFI_KIMG_ALIGN;
|
|
|
+
|
|
|
/*
|
|
|
* If KASLR is enabled, and we have some randomness available,
|
|
|
* locate the kernel at a randomized offset in physical memory.
|