Re: [PATCH] arm64: fix an issue with kaslr-enabled vmlinux

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

 



I tested this fix and it works well. I am wondering which kexec tool release will pick this fix?

On 8/24/2017 1:32 AM, AKASHI Takahiro wrote:
> Normally vmlinux for arm64 is of ET_EXEC type, while if built with
> CONFIG_RANDAMIZE_BASE (that is KASLR), it will be of ET_DYN type.
> Meanwhile, physical address field of segments in vmlinux has actually
> the same value as virtual address field.
> 
> Accordingly, in this case, it totally makes no sense to check for
> validity of segments against physical memory ranges and, if necessary,
> relocate them in elf_exec_load() on arm64.
> 
> This patch allows to unconditionally skip the check on arm64.
> 
> Signed-off-by: AKASHI Takahiro <takahiro.akashi@xxxxxxxxxx>
> ---
>  include/elf.h          | 3 ++-
>  kexec/kexec-elf-exec.c | 6 +++++-
>  2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/include/elf.h b/include/elf.h
> index 5db637b..b7677a2 100644
> --- a/include/elf.h
> +++ b/include/elf.h
> @@ -258,7 +258,8 @@ typedef struct
>  #define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
>  #define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
>  #define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
> -#define EM_NUM		95
> +#define EM_AARCH64	183		/* ARM AARCH64 */
> +#define EM_NUM		184
>  
>  /* If it is necessary to assign new unofficial EM_* values, please
>     pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
> diff --git a/kexec/kexec-elf-exec.c b/kexec/kexec-elf-exec.c
> index cb62d04..a9329ac 100644
> --- a/kexec/kexec-elf-exec.c
> +++ b/kexec/kexec-elf-exec.c
> @@ -63,9 +63,13 @@ int elf_exec_load(struct mem_ehdr *ehdr, struct kexec_info *info)
>  
>  	/* If I have a dynamic executable find it's size
>  	 * and then find a location for it in memory.
> +	 * Note on arm64:
> +	 * arm64's vmlinux has virtual address in physical address
> +	 * field of PT_LOAD segments. So the following validity check
> +	 * and relocation makes no sense on arm64.
>  	 */
>  	base = 0;
> -	if (ehdr->e_type == ET_DYN) {
> +	if ((ehdr->e_machine != EM_AARCH64) && (ehdr->e_type == ET_DYN)) {
>  		unsigned long first, last, align;
>  		first = ULONG_MAX;
>  		last  = 0;
> 

-- 
 Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

_______________________________________________
kexec mailing list
kexec@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/kexec



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux