// 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);
