mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-30 18:41:11 +00:00
For pairing purpose, we want to store some secret random number in
the base. The most convenient location for this is the rollback
region.
Since the rollback region can now be updated without incrementing
rollback_min_version (when we add entropy to the secret), we need
to add an increasing id to tell the code which rollback region is
the latest.
We also add console commands to manually add entropy.
BRANCH=none
BUG=b:38486828
TEST=Flash hammer (with or without CONFIG_ROLLBACK_ENTROPY_SIZE set)
rollbackinfo => 1 version 0 block, 1 empty block, RW verifies
correctly.
rollbackupdate 0; rollbackinfo => No change
rollbackupdate 1; reboot => RO refuses to jump to RW
only when CONFIG_ROLLBACK_ENTROPY_SIZE is set:
rollbackinfo => Secret is [00..00] on both blocks (so the data
was copied correctly)
rollbackupdate 2, 3, 4; rollbackinfo => Writes alternate
between the 2 blocks.
rollbackupdate 2 => Refuses to downgrade version
TEST=From blank secret [00..00], 'rollbackaddent Hello' updates it
to [ba..fa], which matches the output of:
(dd if=/dev/zero bs=1 count=32; echo -n Hello) | sha256sum
Change-Id: I79c3e790e56e21958cc1b4ba05bd4e5f359d3090
Reviewed-on: https://chromium-review.googlesource.com/511985
Commit-Ready: Nicolas Boichat <drinkcat@chromium.org>
Tested-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/* Copyright 2017 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef __CROS_EC_ROLLBACK_H
|
|
#define __CROS_EC_ROLLBACK_H
|
|
|
|
#define CROS_EC_ROLLBACK_COOKIE 0x0b112233
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
/**
|
|
* Get minimum version set by rollback protection blocks.
|
|
*
|
|
* @return Minimum rollback version, 0 if neither block is initialized,
|
|
* negative value on error.
|
|
*/
|
|
int rollback_get_minimum_version(void);
|
|
|
|
/**
|
|
* Update rollback protection block to the version passed as parameter.
|
|
*
|
|
* @param next_min_version Minimum version to write in rollback block.
|
|
*
|
|
* @return EC_SUCCESS on success, EC_ERROR_* on error.
|
|
*/
|
|
int rollback_update_version(int32_t next_min_version);
|
|
|
|
/**
|
|
* Add entropy to the rollback block.
|
|
*
|
|
* @param data Data to be added to rollback block secret (after hashing)
|
|
* @param len data length
|
|
*
|
|
* @return EC_SUCCESS on success, EC_ERROR_* on error.
|
|
*/
|
|
int rollback_add_entropy(uint8_t *data, unsigned int len);
|
|
|
|
/**
|
|
* Lock rollback protection block, reboot if necessary.
|
|
*
|
|
* @return EC_SUCCESS if rollback was already protected.
|
|
*/
|
|
int rollback_lock(void);
|
|
|
|
#endif
|
|
|
|
#endif /* __CROS_EC_ROLLBACK_H */
|