summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2019-11-14 09:48:34 -0800
committerBrian Norris <briannorris@chromium.org>2019-11-14 21:32:55 +0000
commit49428f49143ba0357693f4ace9b169ce63cfa42c (patch)
tree63ad7c007a13a4206ac5add9f881793488754cb7 /firmware
parent54fc81cf692dbcb4496fa9664103564a9c386c05 (diff)
downloadvboot-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.c19
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. */