| 18 | } |
| 19 | |
| 20 | struct 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 |
no test coverage detected