mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2025-04-29 16:01:58 +00:00
89 lines
2.8 KiB
C
89 lines
2.8 KiB
C
// SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
/*
|
|
* sbat.c - parse SBAT data from the .sbat section data
|
|
*/
|
|
|
|
#ifndef SBAT_H_
|
|
#define SBAT_H_
|
|
|
|
#define UEFI_VAR_NV_BS \
|
|
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS)
|
|
#define UEFI_VAR_NV_BS_RT \
|
|
(EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | \
|
|
EFI_VARIABLE_RUNTIME_ACCESS)
|
|
#define UEFI_VAR_NV_BS_TIMEAUTH \
|
|
(UEFI_VAR_NV_BS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
|
|
|
|
#if defined(ENABLE_SHIM_DEVEL)
|
|
#define SBAT_VAR_NAME L"SbatLevel_DEVEL"
|
|
#define SBAT_VAR_NAME8 "SbatLevel_DEVEL"
|
|
#define SBAT_RT_VAR_NAME L"SbatLevelRT_DEVEL"
|
|
#define SBAT_RT_VAR_NAME8 "SbatLevelRT_DEVEL"
|
|
#define SBAT_VAR_ATTRS UEFI_VAR_NV_BS_RT
|
|
#else
|
|
#define SBAT_VAR_NAME L"SbatLevel"
|
|
#define SBAT_VAR_NAME8 "SbatLevel"
|
|
#define SBAT_RT_VAR_NAME L"SbatLevelRT"
|
|
#define SBAT_RT_VAR_NAME8 "SbatLevelRT"
|
|
#define SBAT_VAR_ATTRS UEFI_VAR_NV_BS
|
|
#endif
|
|
|
|
#define SBAT_POLICY L"SbatPolicy"
|
|
#define SBAT_POLICY8 "SbatPolicy"
|
|
#define SSP_POLICY L"SSPPolicy"
|
|
#define SSP_POLICY8 "SSPPolicy"
|
|
|
|
#define POLICY_LATEST 1
|
|
#define POLICY_AUTOMATIC 2
|
|
#define POLICY_RESET 3
|
|
#define POLICY_NOTREAD 255
|
|
|
|
#define REVOCATIONFILE L"revocations.efi"
|
|
|
|
extern UINTN _sbat, _esbat;
|
|
|
|
struct sbat_var_entry {
|
|
const CHAR8 *component_name;
|
|
const CHAR8 *component_generation;
|
|
/*
|
|
* This column is only actually on the "sbat" version entry
|
|
*/
|
|
const CHAR8 *sbat_datestamp;
|
|
list_t list;
|
|
};
|
|
extern list_t sbat_var;
|
|
#define SBAT_VAR_COLUMNS ((sizeof (struct sbat_var_entry) - sizeof(list_t)) / sizeof(CHAR8 *))
|
|
#define SBAT_VAR_REQUIRED_COLUMNS (SBAT_VAR_COLUMNS - 1)
|
|
|
|
EFI_STATUS parse_sbat_var(list_t *entries, char *sbat_var_candidate);
|
|
void cleanup_sbat_var(list_t *entries);
|
|
EFI_STATUS set_sbat_uefi_variable_internal(void);
|
|
EFI_STATUS set_sbat_uefi_variable(char *, char *);
|
|
bool preserve_sbat_uefi_variable(UINT8 *sbat, UINTN sbatsize,
|
|
UINT32 attributes, char *sbar_var);
|
|
|
|
struct sbat_section_entry {
|
|
const CHAR8 *component_name;
|
|
const CHAR8 *component_generation;
|
|
const CHAR8 *vendor_name;
|
|
const CHAR8 *vendor_package_name;
|
|
const CHAR8 *vendor_version;
|
|
const CHAR8 *vendor_url;
|
|
};
|
|
#define SBAT_SECTION_COLUMNS (sizeof (struct sbat_section_entry) / sizeof(CHAR8 *))
|
|
|
|
EFI_STATUS
|
|
parse_sbat_section(char *section_base, size_t section_size, size_t *n,
|
|
struct sbat_section_entry ***entriesp);
|
|
void cleanup_sbat_section_entries(size_t n, struct sbat_section_entry **entries);
|
|
|
|
EFI_STATUS verify_sbat(size_t n, struct sbat_section_entry **entries);
|
|
|
|
#ifdef SHIM_UNIT_TEST
|
|
EFI_STATUS parse_sbat_var_data(list_t *entries, UINT8 *data, UINTN datasize);
|
|
EFI_STATUS verify_sbat_helper(list_t *sbat_var, size_t n,
|
|
struct sbat_section_entry **entries);
|
|
#endif /* !SHIM_UNIT_TEST */
|
|
#endif /* !SBAT_H_ */
|
|
// vim:fenc=utf-8:tw=75:noet
|