diff options
author | Julius Werner <jwerner@chromium.org> | 2019-11-14 09:48:34 -0800 |
---|---|---|
committer | Brian Norris <briannorris@chromium.org> | 2019-11-14 21:32:55 +0000 |
commit | 49428f49143ba0357693f4ace9b169ce63cfa42c (patch) | |
tree | 63ad7c007a13a4206ac5add9f881793488754cb7 /firmware | |
parent | 54fc81cf692dbcb4496fa9664103564a9c386c05 (diff) | |
download | vboot-49428f49143ba0357693f4ace9b169ce63cfa42c.tar.gz |
crossystem: Add a fake workbuffer for the fake context
crossystem functions just make up a fake vb2_context for calling into
things like vb2_nv_init(), but that function actually accesses
vb2_shared_data as well. This used to work because vb2_get_sd() would
return NULL in that case and vb2_nv_init() actually checks for that,
but with the persistent context model this is no longer possible and
making up directly allocated contexts is always illegal.
This patch adds a small fake workbuffer to the fake context so we can
have real backing storage for shared data. (This might not be the final
way we want to fix it but should work as a quick band-aid over the
crashes.)
Also remove the now pointless (sd == NULL) checks from vb2_nv_init().
BRANCH=None
BUG=chromium:1024732
TEST=make runtests
Change-Id: I91247013f092bbfc41cf1974b82cf70a29fa4734
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/1917486
Tested-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Queue: Brian Norris <briannorris@chromium.org>
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/2lib/2nvstorage.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/firmware/2lib/2nvstorage.c b/firmware/2lib/2nvstorage.c index e3846d30..7af83762 100644 --- a/firmware/2lib/2nvstorage.c +++ b/firmware/2lib/2nvstorage.c @@ -76,24 +76,13 @@ void vb2_nv_init(struct vb2_context *ctx) /* Regenerate CRC */ vb2_nv_regen_crc(ctx); - /* - * Set status flag. - * - * Note that early in some calling sequences, shared data may - * not be available. For example, if there is an error - * allocating the context work buffer, and we're trying to - * initialize non-volatile storage so we can write a recovery - * request. In that case, sd will be NULL. So while we don't - * usually need to check for that in other library functions, - * here we do. - */ - if (sd) - sd->status |= VB2_SD_STATUS_NV_REINIT; + /* Set status flag. */ + sd->status |= VB2_SD_STATUS_NV_REINIT; + /* TODO: unit test for status flag being set */ } - if (sd) - sd->status |= VB2_SD_STATUS_NV_INIT; + sd->status |= VB2_SD_STATUS_NV_INIT; } /* Macro for vb2_nv_get() single-bit settings to reduce duplicate code. */ |