MCPcopy Create free account
hub / github.com/coreboot/coreboot / vs_load

Function vs_load

util/smmstoretool/vs.c:20–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18}
19
20struct var_store_t vs_load(struct mem_range_t vs_data, bool is_auth_var_store)
21{
22 uint8_t *var_hdr = vs_data.start;
23
24 struct var_store_t vs = {
25 .is_auth_var_store = is_auth_var_store,
26 .vars = NULL,
27 };
28
29 struct var_t *last_var = NULL;
30
31 const size_t var_hdr_size = get_var_hdr_size(is_auth_var_store);
32 while (var_hdr + var_hdr_size < vs_data.start + vs_data.length) {
33 uint16_t start_id;
34 uint8_t state;
35 struct var_t var = {0};
36 uint8_t *var_data = var_hdr;
37
38 if (is_auth_var_store) {
39 const AUTHENTICATED_VARIABLE_HEADER *auth_hdr =
40 (void *)var_data;
41
42 start_id = auth_hdr->StartId;
43 state = auth_hdr->State;
44
45 var.reserved = auth_hdr->Reserved;
46 var.attrs = auth_hdr->Attributes;
47 var.name_size = auth_hdr->NameSize;
48 var.data_size = auth_hdr->DataSize;
49 var.guid = auth_hdr->VendorGuid;
50 } else {
51 const VARIABLE_HEADER *no_auth_hdr = (void *)var_data;
52
53 start_id = no_auth_hdr->StartId;
54 state = no_auth_hdr->State;
55
56 var.reserved = no_auth_hdr->Reserved;
57 var.attrs = no_auth_hdr->Attributes;
58 var.name_size = no_auth_hdr->NameSize;
59 var.data_size = no_auth_hdr->DataSize;
60 var.guid = no_auth_hdr->VendorGuid;
61 }
62
63 var_hdr += HEADER_ALIGN(var_hdr_size +
64 var.name_size +
65 var.data_size);
66
67 if (start_id != VARIABLE_DATA)
68 break;
69
70 if (state != VAR_ADDED)
71 continue;
72
73 if (var.data_size == UINT32_MAX ||
74 var.name_size == UINT32_MAX ||
75 var.attrs == UINT32_MAX)
76 continue;
77

Callers 1

storage_openFunction · 0.85

Calls 3

get_var_hdr_sizeFunction · 0.85
xmallocFunction · 0.70
memcpyFunction · 0.50

Tested by

no test coverage detected