Skip to content
Permalink
Browse files
arm64: Store IMA log information in kimage used for kexec
Address and size of the buffer containing the IMA measurement log need
to be passed from the current kernel to the next kernel on kexec.

Add address and size fields to "struct kimage_arch" for ARM64 platform
to hold the address and size of the IMA measurement log buffer.
Define an architecture specific function for ARM64 namely
arch_ima_add_kexec_buffer() that will set the address and size of
the current kernel's IMA buffer to be passed to the next kernel on kexec.

Co-developed-by: Prakhar Srivastava <prsriva@linux.microsoft.com>
Signed-off-by: Prakhar Srivastava <prsriva@linux.microsoft.com>
Signed-off-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com>
  • Loading branch information
nramas authored and intel-lab-lkp committed Aug 19, 2020
1 parent 4ea3b8f commit 35dba82b07df4391b0b88724808a43c9a11395e8
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
@@ -0,0 +1,17 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_ARCH_IMA_H
#define _ASM_ARCH_IMA_H

struct kimage;

#ifdef CONFIG_IMA_KEXEC
int arch_ima_add_kexec_buffer(struct kimage *image, unsigned long load_addr,
size_t size);
#else
static inline int arch_ima_add_kexec_buffer(struct kimage *image,
unsigned long load_addr, size_t size)
{
return 0;
}
#endif /* CONFIG_IMA_KEXEC */
#endif /* _ASM_ARCH_IMA_H */
@@ -100,6 +100,9 @@ struct kimage_arch {
void *elf_headers;
unsigned long elf_headers_mem;
unsigned long elf_headers_sz;

phys_addr_t ima_buffer_addr;
size_t ima_buffer_size;
};

extern const struct kexec_file_ops kexec_image_ops;
@@ -38,6 +38,23 @@ const struct kexec_file_ops * const kexec_file_loaders[] = {
NULL
};

/**
* arch_ima_add_kexec_buffer - do arch-specific steps to add the IMA buffer
*
* Architectures should use this function to pass on the IMA buffer
* information to the next kernel.
*
* Return: 0 on success, negative errno on error.
*/
int arch_ima_add_kexec_buffer(struct kimage *image, unsigned long load_addr,
size_t size)
{
image->arch.ima_buffer_addr = load_addr;
image->arch.ima_buffer_size = size;
return 0;
}


int arch_kimage_file_post_load_cleanup(struct kimage *image)
{
vfree(image->arch.dtb);

0 comments on commit 35dba82

Please sign in to comment.