|  | // SPDX-License-Identifier: GPL-2.0 | 
|  |  | 
|  | #include <linux/kernel.h> | 
|  | #include <linux/sched.h> | 
|  | #include <linux/cred.h> | 
|  | #include <linux/err.h> | 
|  | #include <linux/efi.h> | 
|  | #include <linux/slab.h> | 
|  | #include <keys/asymmetric-type.h> | 
|  | #include <keys/system_keyring.h> | 
|  | #include <asm/boot_data.h> | 
|  | #include "../integrity.h" | 
|  |  | 
|  | /* | 
|  | * Load the certs contained in the IPL report created by the machine loader | 
|  | * into the platform trusted keyring. | 
|  | */ | 
|  | static int __init load_ipl_certs(void) | 
|  | { | 
|  | void *ptr, *end; | 
|  | unsigned int len; | 
|  |  | 
|  | if (!ipl_cert_list_addr) | 
|  | return 0; | 
|  | /* Copy the certificates to the system keyring */ | 
|  | ptr = (void *) ipl_cert_list_addr; | 
|  | end = ptr + ipl_cert_list_size; | 
|  | while ((void *) ptr < end) { | 
|  | len = *(unsigned int *) ptr; | 
|  | ptr += sizeof(unsigned int); | 
|  | add_to_platform_keyring("IPL:db", ptr, len); | 
|  | ptr += len; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  | late_initcall(load_ipl_certs); |