summaryrefslogtreecommitdiff
path: root/common/vboot/efs2.c
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2022-09-21 14:10:01 -0700
committerTom Hughes <tomhughes@chromium.org>2022-09-22 12:49:33 -0700
commit2bcf863b492fe7ed8105c853814dba6ed32ba719 (patch)
treefcf6ce5810f9ff9e3c8cce434812dd75492269ed /common/vboot/efs2.c
parente5fb0b9ba488614b5684e640530f00821ab7b943 (diff)
parent28712dae9d7ed1e694f7622cc083afa71090d4d5 (diff)
downloadchrome-ec-firmware-fpmcu-bloonchipper-release.tar.gz
Merge remote-tracking branch cros/main into firmware-fpmcu-bloonchipper-releasefirmware-fpmcu-bloonchipper-release
Generated by: ./util/update_release_branch.py --board bloonchipper --relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware- fpmcu-bloonchipper-release Relevant changes: git log --oneline e5fb0b9ba4..28712dae9d -- board/hatch_fp board/bloonchipper common/fpsensor docs/fingerprint driver/fingerprint util/getversion.sh ded9307b79 util/getversion.sh: Fix version when not in a git repo 956055e692 board: change Google USB vendor info 71b2ef709d Update license boilerplate text in source code files 33e11afda0 Revert "fpsensor: Build fpsensor source file with C++" c8d0360723 fpsensor: Build fpsensor source file with C++ bc113abd53 fpsensor: Fix g++ compiler error 150a58a0dc fpsensor: Fix fp_set_sensor_mode return type b33b5ce85b fpsensor: Remove nested designators for C++ compatibility 2e864b2539 tree-wide: const-ify argv for console commands 56d8b360f9 test: Add test for get ikm failure when seed not set 3a3d6c3690 test: Add test for fpsensor trivial key failure 233e6bbd08 fpsensor_crypto: Abstract calls to hmac_SHA256 0a041b285b docs/fingerprint: Typo correction c03fab67e2 docs/fingerprint: Fix the path of fputils.py 0b5d4baf5a util/getversion.sh: Fix empty file list handling 6e128fe760 FPMCU dev board environment with Satlab 3eb29b6aa5 builtin: Move ssize_t to sys/types.h 345d62ebd1 docs/fingerprint: Update power numbers for latest dartmonkey release c25ffdb316 common: Conditionally support printf %l and %i modifiers 9a3c514b45 test: Add a test to check if the debugger is connected 54e603413f Move standard library tests to their own file 43fa6b4bf8 docs/fingerprint: Update power numbers for latest bloonchipper release 25536f9a84 driver/fingerprint/fpc/bep/fpc_sensor_spi.c: Format with clang-format 4face99efd driver/fingerprint/fpc/libfp/fpc_sensor_pal.h: Format with clang-format 738de2b575 trng: Rename rand to trng_rand 14b8270edd docs/fingerprint: Update dragonclaw power numbers 0b268f93d1 driver/fingerprint/fpc/libfp/fpc_private.c: Format with clang-format f80da163f2 driver/fingerprint/fpc/libfp/fpc_private.h: Format with clang-format 5e9c85c9b1 driver/fingerprint/fpc/libfp/fpc_sensor_pal.c: Format with clang-format c1f9dd3cf8 driver/fingerprint/fpc/libfp/fpc_bio_algorithm.h: Format with clang-format eb1e1bed8d driver/fingerprint/fpc/libfp/fpc1145_private.h: Format with clang-format 6e7b611821 driver/fingerprint/fpc/bep/fpc_bio_algorithm.h: Format with clang-format e0589cd5e2 driver/fingerprint/fpc/bep/fpc1035_private.h: Format with clang-format 7905e556a0 common/fpsensor/fpsensor_crypto.c: Format with clang-format 21289d170c driver/fingerprint/fpc/bep/fpc1025_private.h: Format with clang-format 98a20f937e common/fpsensor/fpsensor_state.c: Format with clang-format a2d255d8af common/fpsensor/fpsensor.c: Format with clang-format 73055eeb3f driver/fingerprint/fpc/bep/fpc_private.c: Format with clang-format 0f7b5cb509 common/fpsensor/fpsensor_private.h: Format with clang-format 1ceade6e65 driver/fingerprint/fpc/bep/fpc_private.h: Format with clang-format dc3e9008b8 board/hatch_fp/board.h: Format with clang-format dca9d74321 Revert "trng: Rename rand to trng_rand" a6b0b3554f trng: Rename rand to trng_rand 28d0b75b70 third_party/boringssl: Remove unused header BRANCH=None BUG=b:246424843 b:234181908 b:244781166 b:234181908 b:244387210 BUG=b:242720240 chromium:1098010 b:180945056 b:236025198 b:234181908 BUG=b:234181908 b:237344361 b:131913998 b:236386294 b:234143158 BUG=b:234781655 b:215613183 b:242720910 TEST=`make -j buildall` TEST=./test/run_device_tests.py --board bloonchipper Test "aes": PASSED Test "cec": PASSED Test "cortexm_fpu": PASSED Test "crc": PASSED Test "flash_physical": PASSED Test "flash_write_protect": PASSED Test "fpsensor_hw": PASSED Test "fpsensor_spi_ro": PASSED Test "fpsensor_spi_rw": PASSED Test "fpsensor_uart_ro": PASSED Test "fpsensor_uart_rw": PASSED Test "mpu_ro": PASSED Test "mpu_rw": PASSED Test "mutex": PASSED Test "pingpong": PASSED Test "printf": PASSED Test "queue": PASSED Test "rollback_region0": PASSED Test "rollback_region1": PASSED Test "rollback_entropy": PASSED Test "rtc": PASSED Test "sha256": PASSED Test "sha256_unrolled": PASSED Test "static_if": PASSED Test "stdlib": PASSED Test "system_is_locked_wp_on": PASSED Test "system_is_locked_wp_off": PASSED Test "timer_dos": PASSED Test "utils": PASSED Test "utils_str": PASSED Test "stm32f_rtc": PASSED Test "panic_data_bloonchipper_v2.0.4277": PASSED Test "panic_data_bloonchipper_v2.0.5938": PASSED Force-Relevant-Builds: all Signed-off-by: Tom Hughes <tomhughes@chromium.org> Change-Id: I264ad0ffe7afcd507a1e483c6e934a9c4fea47c3
Diffstat (limited to 'common/vboot/efs2.c')
-rw-r--r--common/vboot/efs2.c58
1 files changed, 43 insertions, 15 deletions
diff --git a/common/vboot/efs2.c b/common/vboot/efs2.c
index a410c274f5..b45109029d 100644
--- a/common/vboot/efs2.c
+++ b/common/vboot/efs2.c
@@ -1,4 +1,4 @@
-/* Copyright 2020 The Chromium OS Authors. All rights reserved.
+/* Copyright 2020 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -26,19 +26,23 @@
#include "vboot.h"
#include "vboot_hash.h"
-#define CPRINTS(format, args...) cprints(CC_VBOOT,"VB " format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_VBOOT,"VB " format, ## args)
+#define CPRINTS(format, args...) cprints(CC_VBOOT, "VB " format, ##args)
+#define CPRINTF(format, args...) cprintf(CC_VBOOT, "VB " format, ##args)
+/* LCOV_EXCL_START - TODO(b/172210316) implement is_battery_ready(), and remove
+ * this lcov excl.
+ */
static const char *boot_mode_to_string(uint8_t mode)
{
static const char *boot_mode_str[] = {
- [BOOT_MODE_NORMAL] = "NORMAL",
- [BOOT_MODE_NO_BOOT] = "NO_BOOT",
+ [BOOT_MODE_NORMAL] = "NORMAL",
+ [BOOT_MODE_NO_BOOT] = "NO_BOOT",
};
if (mode < ARRAY_SIZE(boot_mode_str))
return boot_mode_str[mode];
return "UNDEF";
}
+/* LCOV_EXCL_STOP */
/*
* Check whether the session has successfully ended or not. ERR_TIMEOUT is
@@ -46,8 +50,8 @@ static const char *boot_mode_to_string(uint8_t mode)
*/
static bool is_valid_cr50_response(enum cr50_comm_err code)
{
- return code != CR50_COMM_ERR_TIMEOUT
- && (code >> 8) == CR50_COMM_ERR_PREFIX;
+ return code != CR50_COMM_ERR_TIMEOUT &&
+ (code >> 8) == CR50_COMM_ERR_PREFIX;
}
__overridable void board_enable_packet_mode(bool enable)
@@ -74,8 +78,13 @@ static enum cr50_comm_err send_to_cr50(const uint8_t *data, size_t size)
if (uart_shell_stop()) {
/* Failed to stop the shell. */
+ /* LCOV_EXCL_START - At least on posix systems, uart_shell_stop
+ * will never fail, it will crash the binary or hang forever on
+ * error.
+ */
board_enable_packet_mode(false);
return CR50_COMM_ERR_UNKNOWN;
+ /* LCOV_EXCL_STOP */
}
/*
@@ -108,7 +117,7 @@ static enum cr50_comm_err send_to_cr50(const uint8_t *data, size_t size)
while (!timeout) {
int c = uart_getc();
if (c != -1) {
- res.error = res.error | c << (i*8);
+ res.error = res.error | c << (i * 8);
break;
}
msleep(1);
@@ -159,7 +168,7 @@ static enum cr50_comm_err cmd_to_cr50(enum cr50_comm_cmd cmd,
p->size = size;
memcpy(p->data, data, size);
p->crc = cros_crc8((uint8_t *)&p->type,
- sizeof(p->type) + sizeof(p->size) + size);
+ sizeof(p->type) + sizeof(p->size) + size);
do {
rv = send_to_cr50((uint8_t *)&s,
@@ -191,17 +200,21 @@ static enum cr50_comm_err verify_hash(void)
return cmd_to_cr50(CR50_COMM_CMD_VERIFY_HASH, hash, SHA256_DIGEST_SIZE);
}
+/* LCOV_EXCL_START - TODO(b/172210316) implement is_battery_ready(), and remove
+ * this lcov excl.
+ */
static enum cr50_comm_err set_boot_mode(uint8_t mode)
{
enum cr50_comm_err rv;
CPRINTS("Setting boot mode to %s(%d)", boot_mode_to_string(mode), mode);
- rv = cmd_to_cr50(CR50_COMM_CMD_SET_BOOT_MODE,
- &mode, sizeof(enum boot_mode));
+ rv = cmd_to_cr50(CR50_COMM_CMD_SET_BOOT_MODE, &mode,
+ sizeof(enum boot_mode));
if (rv != CR50_COMM_SUCCESS)
CPRINTS("Failed to set boot mode");
return rv;
}
+/* LCOV_EXCL_STOP */
static bool pd_comm_enabled;
@@ -216,10 +229,19 @@ bool vboot_allow_usb_pd(void)
return pd_comm_enabled;
}
+#ifdef TEST_BUILD
+void vboot_disable_pd(void)
+{
+ pd_comm_enabled = false;
+}
+#endif
+
+/* LCOV_EXCL_START - This is just a stub intended to be overridden */
__overridable void show_critical_error(void)
{
CPRINTS("%s", __func__);
}
+/* LCOV_EXCL_STOP */
static void verify_and_jump(void)
{
@@ -244,14 +266,16 @@ static void verify_and_jump(void)
}
}
+/* LCOV_EXCL_START - This is just a stub intended to be overridden */
__overridable void show_power_shortage(void)
{
CPRINTS("%s", __func__);
}
+/* LCOV_EXCL_STOP */
static bool is_battery_ready(void)
{
- /* TODO: Add battery check (https://crbug.com/1045216) */
+ /* TODO(b/172210316): Add battery check */
return true;
}
@@ -274,8 +298,8 @@ void vboot_main(void)
(system_get_reset_flags() & EC_RESET_FLAG_STAY_IN_RO)) {
if (system_is_manual_recovery())
CPRINTS("In recovery mode");
- if (!IS_ENABLED(CONFIG_BATTERY)
- && !IS_ENABLED(HAS_TASK_KEYSCAN)) {
+ if (!IS_ENABLED(CONFIG_BATTERY) &&
+ !IS_ENABLED(HAS_TASK_KEYSCAN)) {
/*
* For Chromeboxes, we relax security by allowing PD in
* RO. Attackers don't gain meaningful advantage on
@@ -293,12 +317,16 @@ void vboot_main(void)
* If battery is drained or bad, we will boot in NO_BOOT mode to
* inform the user of the problem.
*/
+ /* LCOV_EXCL_START - TODO(b/172210316) implement
+ * is_battery_ready(), and remove this lcov excl.
+ */
if (!is_battery_ready()) {
CPRINTS("Battery not ready or bad");
if (set_boot_mode(BOOT_MODE_NO_BOOT) ==
- CR50_COMM_SUCCESS)
+ CR50_COMM_SUCCESS)
enable_pd();
}
+ /* LCOV_EXCL_STOP */
/* We'll enter recovery mode immediately, later, or never. */
return;