diff options
author | Mary Ruthven <mruthven@chromium.org> | 2019-10-30 18:13:25 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-12-10 00:38:01 +0000 |
commit | d36709b2e140b91afde4186f3a95fc3191367261 (patch) | |
tree | db8a532541ab799cee8238936f3a27f3c31355d0 | |
parent | 6fbdb68c64ae88fbe26e00458b88a7c30cc32fe5 (diff) | |
download | chrome-ec-d36709b2e140b91afde4186f3a95fc3191367261.tar.gz |
sn_bits: allow setting serial number if BID type is blank
BUG=b:143649068
BRANCH=cr50
TEST=manual
eraseflashinfo
Board ID: ffffffff:ffffffff, flags ffffffff
gsctool -S AAAAAAAAAAAAAAAAAAAAAAA1
succeeds
eraseflashinfo
gsctool -i 0xffffffff:0x3f80
Board ID: ffffffff:ffffffff, flags 0x3f80
gsctool -S AAAAAAAAAAAAAAAAAAAAAAA1
succeeds
eraseflashinfo
gsctool -i ZZAF:0x7f7f
Board ID: 5a5a4146:a5a5beb9, flags 0x3f80
gsctool -S AAAAAAAAAAAAAAAAAAAAAAA1
fails
Change-Id: I5d2a3f35c5c7e4e79cadbb3a6737e5db00f8ca5a
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1892120
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
(cherry picked from commit e347d4a090d8963773ccf221b270afea21f9dc73)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1920403
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
(cherry picked from commit 0ea3a84dfece3234a0cd6f79185061250f176d19)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1959319
-rw-r--r-- | chip/g/board_id.c | 2 | ||||
-rw-r--r-- | chip/g/board_id.h | 9 | ||||
-rw-r--r-- | chip/g/sn_bits.c | 4 |
3 files changed, 12 insertions, 3 deletions
diff --git a/chip/g/board_id.c b/chip/g/board_id.c index fb72192b43..641a50afde 100644 --- a/chip/g/board_id.c +++ b/chip/g/board_id.c @@ -25,7 +25,7 @@ const struct SignedHeader *get_current_image_header(void) get_program_memory_addr(system_get_image_copy()); } -static int board_id_type_is_blank(const struct board_id *id) +int board_id_type_is_blank(const struct board_id *id) { return (id->type & id->type_inv) == BLANK_FIELD; } diff --git a/chip/g/board_id.h b/chip/g/board_id.h index f06f23190b..01cb7e5028 100644 --- a/chip/g/board_id.h +++ b/chip/g/board_id.h @@ -59,4 +59,13 @@ uint32_t board_id_mismatch(const struct SignedHeader *h); * @return True if the board id is all 0xffffffff. */ int board_id_is_blank(const struct board_id *id); + +/** + * Check if the board id type and type_inv are 0xffffffff. + * + * @param id Pointer to a Board ID structure + * + * @return True if the board id type and type_inv are 0xffffffff. + */ +int board_id_type_is_blank(const struct board_id *id); #endif /* ! __EC_CHIP_G_BOARD_ID_H */ diff --git a/chip/g/sn_bits.c b/chip/g/sn_bits.c index 26d7d37ffc..6783133d52 100644 --- a/chip/g/sn_bits.c +++ b/chip/g/sn_bits.c @@ -152,10 +152,10 @@ static enum vendor_cmd_rc vc_sn_set_hash(enum vendor_cmd_cc code, /* * Only allow writing sn bits if we can successfully verify - * that the board ID has not been writen yet. + * that the board ID type has not been writen yet. */ if (read_board_id(&bid) != EC_SUCCESS || - !board_id_is_blank(&bid)) { + !board_id_type_is_blank(&bid)) { *pbuf = EC_ERROR_ACCESS_DENIED; return VENDOR_RC_NOT_ALLOWED; } |