예제 #1
0
static int efi_get_secureboot(efi_system_table_t *sys_table_arg)
{
	static efi_char16_t const sb_var_name[] = {
		'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };
	static efi_char16_t const sm_var_name[] = {
		'S', 'e', 't', 'u', 'p', 'M', 'o', 'd', 'e', 0 };

	efi_guid_t var_guid = EFI_GLOBAL_VARIABLE_GUID;
	efi_get_variable_t *f_getvar = sys_table_arg->runtime->get_variable;
	u8 val;
	unsigned long size = sizeof(val);
	efi_status_t status;

	status = f_getvar((efi_char16_t *)sb_var_name, (efi_guid_t *)&var_guid,
			  NULL, &size, &val);

	if (status != EFI_SUCCESS)
		goto out_efi_err;

	if (val == 0)
		return 0;

	status = f_getvar((efi_char16_t *)sm_var_name, (efi_guid_t *)&var_guid,
			  NULL, &size, &val);

	if (status != EFI_SUCCESS)
		goto out_efi_err;

	if (val == 1)
		return 0;

	return 1;

out_efi_err:
	switch (status) {
	case EFI_NOT_FOUND:
		return 0;
	case EFI_DEVICE_ERROR:
		return -EIO;
	case EFI_SECURITY_VIOLATION:
		return -EACCES;
	default:
		return -EINVAL;
	}
}
예제 #2
0
static int efi_secureboot_enabled(efi_system_table_t *sys_table_arg)
{
	static efi_guid_t const var_guid = EFI_GLOBAL_VARIABLE_GUID;
	static efi_char16_t const var_name[] = {
		'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0 };

	efi_get_variable_t *f_getvar = sys_table_arg->runtime->get_variable;
	unsigned long size = sizeof(u8);
	efi_status_t status;
	u8 val;

	status = f_getvar((efi_char16_t *)var_name, (efi_guid_t *)&var_guid,
			  NULL, &size, &val);

	switch (status) {
	case EFI_SUCCESS:
		return val;
	case EFI_NOT_FOUND:
		return 0;
	default:
		return 1;
	}
}