coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
metadata_hash.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <assert.h>
4 #include <metadata_hash.h>
5 #include <symbols.h>
6 
7 #if !CONFIG(COMPRESS_BOOTBLOCK) || ENV_DECOMPRESSOR
8 __attribute__((used, section(".metadata_hash_anchor")))
10  /* This is the only place in all of coreboot where we actually need to use this. */
12  .cbfs_hash = { .algo = CONFIG_CBFS_HASH_ALGO }
13 };
14 
15 static struct metadata_hash_anchor *get_anchor(void)
16 {
17  return &metadata_hash_anchor;
18 }
19 
21 {
22  return get_anchor();
23 }
24 #else
25 static struct metadata_hash_anchor *anchor_ptr = NULL;
26 
27 static struct metadata_hash_anchor *get_anchor(void)
28 {
29  assert(anchor_ptr != NULL);
30  return anchor_ptr;
31 }
32 
33 void metadata_hash_import_anchor(void *ptr)
34 {
35  anchor_ptr = ptr;
36 }
37 #endif
38 
39 struct vb2_hash *metadata_hash_get(void)
40 {
41  return &get_anchor()->cbfs_hash;
42 }
43 
44 vb2_error_t metadata_hash_verify_fmap(const void *fmap_buffer, size_t fmap_size)
45 {
46  struct vb2_hash hash = { .algo = get_anchor()->cbfs_hash.algo };
48  vb2_digest_size(hash.algo));
49  return vb2_hash_verify(fmap_buffer, fmap_size, &hash);
50 }
void * memcpy(void *dest, const void *src, size_t n)
Definition: memcpy.c:7
#define assert(statement)
Definition: assert.h:74
#define DO_NOT_USE_METADATA_HASH_ANCHOR_MAGIC_DO_NOT_USE
Definition: metadata_hash.h:32
static uint8_t * metadata_hash_anchor_fmap_hash(struct metadata_hash_anchor *anchor)
Definition: metadata_hash.h:21
void metadata_hash_import_anchor(void *ptr)
static struct metadata_hash_anchor metadata_hash_anchor
Definition: metadata_hash.c:9
void * metadata_hash_export_anchor(void)
Definition: metadata_hash.c:20
struct vb2_hash * metadata_hash_get(void)
Definition: metadata_hash.c:39
static struct metadata_hash_anchor * get_anchor(void)
Definition: metadata_hash.c:15
vb2_error_t metadata_hash_verify_fmap(const void *fmap_buffer, size_t fmap_size)
Definition: metadata_hash.c:44
#define NULL
Definition: stddef.h:19
struct vb2_hash cbfs_hash
Definition: metadata_hash.h:12