mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
efi_loader: display RO attribute in printenv -e
Let the 'printenv -e' command display the read only flag. If the variable is time authenticated write the time stamp. Avoid EFI_CALL() when calling SetVariable() and GetVariable(). Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
f2d2b3a11c
commit
2a79c352ca
|
@ -9,11 +9,13 @@
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <efi_loader.h>
|
#include <efi_loader.h>
|
||||||
|
#include <efi_variable.h>
|
||||||
#include <env.h>
|
#include <env.h>
|
||||||
#include <exports.h>
|
#include <exports.h>
|
||||||
#include <hexdump.h>
|
#include <hexdump.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <mapmem.h>
|
#include <mapmem.h>
|
||||||
|
#include <rtc.h>
|
||||||
#include <uuid.h>
|
#include <uuid.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
|
@ -34,6 +36,7 @@ static const struct {
|
||||||
{EFI_VARIABLE_RUNTIME_ACCESS, "RT"},
|
{EFI_VARIABLE_RUNTIME_ACCESS, "RT"},
|
||||||
{EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, "AW"},
|
{EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, "AW"},
|
||||||
{EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS, "AT"},
|
{EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS, "AT"},
|
||||||
|
{EFI_VARIABLE_READ_ONLY, "RO"},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
|
@ -87,20 +90,22 @@ static void efi_dump_single_var(u16 *name, const efi_guid_t *guid, bool verbose)
|
||||||
{
|
{
|
||||||
u32 attributes;
|
u32 attributes;
|
||||||
u8 *data;
|
u8 *data;
|
||||||
|
u64 time;
|
||||||
|
struct rtc_time tm;
|
||||||
efi_uintn_t size;
|
efi_uintn_t size;
|
||||||
int count, i;
|
int count, i;
|
||||||
efi_status_t ret;
|
efi_status_t ret;
|
||||||
|
|
||||||
data = NULL;
|
data = NULL;
|
||||||
size = 0;
|
size = 0;
|
||||||
ret = EFI_CALL(efi_get_variable(name, guid, &attributes, &size, data));
|
ret = efi_get_variable_int(name, guid, &attributes, &size, data, &time);
|
||||||
if (ret == EFI_BUFFER_TOO_SMALL) {
|
if (ret == EFI_BUFFER_TOO_SMALL) {
|
||||||
data = malloc(size);
|
data = malloc(size);
|
||||||
if (!data)
|
if (!data)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
ret = EFI_CALL(efi_get_variable(name, guid, &attributes, &size,
|
ret = efi_get_variable_int(name, guid, &attributes, &size,
|
||||||
data));
|
data, &time);
|
||||||
}
|
}
|
||||||
if (ret == EFI_NOT_FOUND) {
|
if (ret == EFI_NOT_FOUND) {
|
||||||
printf("Error: \"%ls\" not defined\n", name);
|
printf("Error: \"%ls\" not defined\n", name);
|
||||||
|
@ -109,13 +114,16 @@ static void efi_dump_single_var(u16 *name, const efi_guid_t *guid, bool verbose)
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
printf("%ls:\n %s:", name, efi_guid_to_str(guid));
|
rtc_to_tm(time, &tm);
|
||||||
|
printf("%ls:\n %s:\n", name, efi_guid_to_str(guid));
|
||||||
|
if (attributes & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
|
||||||
|
printf(" %04d-%02d-%02d %02d:%02d:%02d\n", tm.tm_year,
|
||||||
|
tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||||
|
printf(" ");
|
||||||
for (count = 0, i = 0; i < ARRAY_SIZE(efi_var_attrs); i++)
|
for (count = 0, i = 0; i < ARRAY_SIZE(efi_var_attrs); i++)
|
||||||
if (attributes & efi_var_attrs[i].mask) {
|
if (attributes & efi_var_attrs[i].mask) {
|
||||||
if (count)
|
if (count)
|
||||||
putc('|');
|
putc('|');
|
||||||
else
|
|
||||||
putc(' ');
|
|
||||||
count++;
|
count++;
|
||||||
puts(efi_var_attrs[i].text);
|
puts(efi_var_attrs[i].text);
|
||||||
}
|
}
|
||||||
|
@ -592,8 +600,8 @@ int do_env_set_efi(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
p = var_name16;
|
p = var_name16;
|
||||||
utf8_utf16_strncpy(&p, var_name, len + 1);
|
utf8_utf16_strncpy(&p, var_name, len + 1);
|
||||||
|
|
||||||
ret = EFI_CALL(efi_set_variable(var_name16, &guid, attributes,
|
ret = efi_set_variable_int(var_name16, &guid, attributes, size, value,
|
||||||
size, value));
|
true);
|
||||||
unmap_sysmem(value);
|
unmap_sysmem(value);
|
||||||
if (ret == EFI_SUCCESS) {
|
if (ret == EFI_SUCCESS) {
|
||||||
ret = CMD_RET_SUCCESS;
|
ret = CMD_RET_SUCCESS;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user