Track errno and errstr in the kthread
[akaros.git] / kern / include / crypto / 2misc.h
1 /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * Misc functions which need access to vb2_context but are not public APIs
6  */
7
8 #pragma once
9
10 #include "2api.h"
11
12 struct vb2_gbb_header;
13 struct vb2_workbuf;
14
15 /**
16  * Get the shared data pointer from the vboot context
17  *
18  * @param ctx           Vboot context
19  * @return The shared data pointer.
20  */
21 static __inline struct vb2_shared_data *vb2_get_sd(struct vb2_context *ctx) {
22         return (struct vb2_shared_data *)ctx->workbuf;
23 }
24
25 /**
26  * Validate gbb signature (the magic number)
27  *
28  * @param sig           Pointer to the signature bytes to validate
29  * @return VB2_SUCCESS if valid or non-zero if error.
30  */
31 int vb2_validate_gbb_signature(uint8_t *sig);
32
33 /**
34  * Initialize a work buffer from the vboot context.
35  *
36  * This sets the work buffer to the unused portion of the context work buffer.
37  *
38  * @param ctx           Vboot context
39  * @param wb            Work buffer to initialize
40  */
41 void vb2_workbuf_from_ctx(struct vb2_context *ctx, struct vb2_workbuf *wb);
42
43 /**
44  * Read the GBB header.
45  *
46  * @param ctx           Vboot context
47  * @param gbb           Destination for header
48  * @return VB2_SUCCESS, or non-zero if error.
49  */
50 int vb2_read_gbb_header(struct vb2_context *ctx, struct vb2_gbb_header *gbb);
51
52 /**
53  * Handle vboot failure.
54  *
55  * If the failure occurred after choosing a firmware slot, and the other
56  * firmware slot is not known-bad, try the other firmware slot after reboot.
57  *
58  * If the failure occurred before choosing a firmware slot, or both slots have
59  * failed in successive boots, request recovery.
60  *
61  * @param reason        Recovery reason
62  * @param subcode       Recovery subcode
63  */
64 void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode);
65
66 /**
67  * Set up the verified boot context data, if not already set up.
68  *
69  * This uses ctx->workbuf_used=0 as a flag to indicate that the data has not
70  * yet been set up.  Caller must set that before calling any voot functions;
71  * see 2api.h.
72  *
73  * @param ctx           Vboot context to initialize
74  * @return VB2_SUCCESS, or error code on error.
75  */
76 int vb2_init_context(struct vb2_context *ctx);
77
78 /**
79  * Check for recovery reasons we can determine early in the boot process.
80  *
81  * On exit, check ctx->flags for VB2_CONTEXT_RECOVERY_MODE; if present, jump to
82  * the recovery path instead of continuing with normal boot.  This is the only
83  * direct path to recovery mode.  All other errors later in the boot process
84  * should induce a reboot instead of jumping to recovery, so that recovery mode
85  * starts from a consistent firmware state.
86  *
87  * @param ctx           Vboot context
88  */
89 void vb2_check_recovery(struct vb2_context *ctx);
90
91 /**
92  * Parse the GBB header.
93  *
94  * @param ctx           Vboot context
95  * @return VB2_SUCCESS, or error code on error.
96  */
97 int vb2_fw_parse_gbb(struct vb2_context *ctx);
98
99 /**
100  * Check developer switch position.
101  *
102  * @param ctx           Vboot context
103  * @return VB2_SUCCESS, or error code on error.
104  */
105 int vb2_check_dev_switch(struct vb2_context *ctx);
106
107 /**
108  * Check if we need to clear the TPM owner.
109  *
110  * @param ctx           Vboot context
111  * @return VB2_SUCCESS, or error code on error.
112  */
113 int vb2_check_tpm_clear(struct vb2_context *ctx);
114
115 /**
116  * Decide which firmware slot to try this boot.
117  *
118  * @param ctx           Vboot context
119  * @return VB2_SUCCESS, or error code on error.
120  */
121 int vb2_select_fw_slot(struct vb2_context *ctx);
122
123 /**
124  * Verify the firmware keyblock using the root key.
125  *
126  * After this call, the data key is stored in the work buffer.
127  *
128  * @param ctx           Vboot context
129  * @return VB2_SUCCESS, or error code on error.
130  */
131 int vb2_load_fw_keyblock(struct vb2_context *ctx);
132 int vb21_load_fw_keyblock(struct vb2_context *ctx);
133
134 /**
135  * Verify the firmware preamble using the data subkey from the keyblock.
136  *
137  * After this call, the preamble is stored in the work buffer.
138  *
139  * @param ctx           Vboot context
140  * @return VB2_SUCCESS, or error code on error.
141  */
142 int vb2_load_fw_preamble(struct vb2_context *ctx);
143 int vb21_load_fw_preamble(struct vb2_context *ctx);
144
145 /**
146  * Verify the kernel keyblock using the previously-loaded kernel key.
147  *
148  * After this call, the data key is stored in the work buffer.
149  *
150  * @param ctx           Vboot context
151  * @return VB2_SUCCESS, or error code on error.
152  */
153 int vb2_load_kernel_keyblock(struct vb2_context *ctx);
154
155 /**
156  * Verify the kernel preamble using the data subkey from the keyblock.
157  *
158  * After this call, the preamble is stored in the work buffer.
159  *
160  * @param ctx           Vboot context
161  * @return VB2_SUCCESS, or error code on error.
162  */
163 int vb2_load_kernel_preamble(struct vb2_context *ctx);
164