summaryrefslogtreecommitdiff
path: root/host
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2021-04-14 15:13:28 +0800
committerCommit Bot <commit-bot@chromium.org>2021-06-15 19:35:52 +0000
commitc6cf8890532a7b78b6cb3dc534145f500444dae2 (patch)
tree4e03d65225afd988a7cdb56bb6ee36e025bd01d2 /host
parentba23df230a9efe7f6aed8faab4dda944f62f76da (diff)
downloadvboot-c6cf8890532a7b78b6cb3dc534145f500444dae2.tar.gz
vboot/vboot_kernel: move kernel/fw struct functions
Relocate currently-in-use kernel struct functions out of lib20 namespace, and into: * 2struct.c for functions required at runtime * host_common.c for functions required by host Relocate firmware struct functions from 2common.c into 2struct.c vb2_common.h may be deleted as a result. This CL is part of a series to merge vboot1 and vboot2.0 kernel verification code; see b/181739551. BUG=b:181739551 TEST=make clean && make runtests BRANCH=none Signed-off-by: Joel Kitching <kitching@google.com> Change-Id: Ic162d9633b6112ddc4a819b3e58d313dc484f304 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2825269 Tested-by: Joel Kitching <kitching@chromium.org> Commit-Queue: Joel Kitching <kitching@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'host')
-rw-r--r--host/lib/host_common.c19
-rw-r--r--host/lib/host_keyblock.c1
-rw-r--r--host/lib/include/host_common.h14
3 files changed, 33 insertions, 1 deletions
diff --git a/host/lib/host_common.c b/host/lib/host_common.c
index 1dc7a542..82a59542 100644
--- a/host/lib/host_common.c
+++ b/host/lib/host_common.c
@@ -133,3 +133,22 @@ struct vb2_kernel_preamble *vb2_create_kernel_preamble(
/* Return the header */
return h;
}
+
+void vb2_kernel_get_vmlinuz_header(const struct vb2_kernel_preamble *preamble,
+ uint64_t *vmlinuz_header_address,
+ uint32_t *vmlinuz_header_size)
+{
+ if (preamble->header_version_minor < 1) {
+ *vmlinuz_header_address = 0;
+ *vmlinuz_header_size = 0;
+ } else {
+ /*
+ * Set header and size only if the preamble header version is >
+ * 2.1 as they don't exist in version 2.0 (Note that we don't
+ * need to check header_version_major; if that's not 2 then
+ * vb2_verify_kernel_preamble() would have already failed.
+ */
+ *vmlinuz_header_address = preamble->vmlinuz_header_address;
+ *vmlinuz_header_size = preamble->vmlinuz_header_size;
+ }
+}
diff --git a/host/lib/host_keyblock.c b/host/lib/host_keyblock.c
index a7dbedef..e5634ced 100644
--- a/host/lib/host_keyblock.c
+++ b/host/lib/host_keyblock.c
@@ -17,7 +17,6 @@
#include "host_key21.h"
#include "host_keyblock.h"
#include "host_key.h"
-#include "vb2_common.h"
struct vb2_keyblock *vb2_create_keyblock(
const struct vb2_packed_key *data_key,
diff --git a/host/lib/include/host_common.h b/host/lib/include/host_common.h
index 55b15d3b..a37a6c9a 100644
--- a/host/lib/include/host_common.h
+++ b/host/lib/include/host_common.h
@@ -64,4 +64,18 @@ struct vb2_kernel_preamble *vb2_create_kernel_preamble(
uint32_t desired_size,
const struct vb2_private_key *signing_key);
+/**
+ * Retrieve the 16-bit vmlinuz header address and size from the preamble.
+ *
+ * Size 0 means there is no 16-bit vmlinuz header present. Old preamble
+ * versions (<2.1) return 0 for both fields.
+ *
+ * @param preamble Preamble to check
+ * @param vmlinuz_header_address Destination for header address
+ * @param vmlinuz_header_size Destination for header size
+ */
+void vb2_kernel_get_vmlinuz_header(const struct vb2_kernel_preamble *preamble,
+ uint64_t *vmlinuz_header_address,
+ uint32_t *vmlinuz_header_size);
+
#endif /* VBOOT_REFERENCE_HOST_COMMON_H_ */