summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatryk Duda <pdk@semihalf.com>2020-08-28 14:22:30 +0200
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-01 21:28:59 +0000
commit8dfc831d80009850a8b5061c5dae0e1698544805 (patch)
tree4a3904abac531bf26d09b49dd3d0c38871a94ac0
parent4565af0f5bb5680ac3f6902b5bcb6ebabe9458fe (diff)
downloadchrome-ec-8dfc831d80009850a8b5061c5dae0e1698544805.tar.gz
common/panic_output: Use newly introduced functions for panic info dump
This patch adds use of function that provides pointer to the beginning of panic data in panic info host command. It also adds use of panic_get_data() in panicinfo command to get pointer that can be safely dereferenced. BUG=b:165773837, b:162254118 BRANCH=none TEST=make -j buildall Signed-off-by: Patryk Duda <pdk@semihalf.com> Change-Id: I403300f796fc2add4fae06728d7da4e43616ef2d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2379847 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4455292 Commit-Queue: Rob Barnes <robbarnes@google.com> Reviewed-by: Boris Mittelberg <bmbm@google.com> Tested-by: Rob Barnes <robbarnes@google.com>
-rw-r--r--common/panic_output.c40
1 files changed, 25 insertions, 15 deletions
diff --git a/common/panic_output.c b/common/panic_output.c
index 66b33c5242..85927380ac 100644
--- a/common/panic_output.c
+++ b/common/panic_output.c
@@ -140,6 +140,14 @@ uintptr_t get_panic_data_start(void)
- pdata_ptr->struct_size);
}
+static uint32_t get_panic_data_size(void)
+{
+ if (pdata_ptr->magic != PANIC_DATA_MAGIC)
+ return 0;
+
+ return pdata_ptr->struct_size;
+}
+
/*
* Returns pointer to panic_data structure that can be safely written.
* Please note that this function can move jump data and jump tags.
@@ -318,7 +326,9 @@ DECLARE_CONSOLE_COMMAND(crash, command_crash,
static int command_panicinfo(int argc, char **argv)
{
- if (pdata_ptr->magic == PANIC_DATA_MAGIC) {
+ struct panic_data * const pdata_ptr = panic_get_data();
+
+ if (pdata_ptr) {
ccprintf("Saved panic data:%s\n",
(pdata_ptr->flags & PANIC_DATA_FLAG_OLD_CONSOLE ?
"" : " (NEW)"));
@@ -328,7 +338,8 @@ static int command_panicinfo(int argc, char **argv)
/* Data has now been printed */
pdata_ptr->flags |= PANIC_DATA_FLAG_OLD_CONSOLE;
} else {
- ccprintf("No saved panic data available.\n");
+ ccprintf("No saved panic data available "
+ "or panic data can't be safely interpreted.\n");
}
return EC_SUCCESS;
}
@@ -341,21 +352,20 @@ DECLARE_CONSOLE_COMMAND(panicinfo, command_panicinfo,
int host_command_panic_info(struct host_cmd_handler_args *args)
{
- uint32_t pdata_size = pdata_ptr->struct_size;
-
- if (pdata_ptr->magic == PANIC_DATA_MAGIC) {
- if (pdata_size > args->response_max) {
- panic_printf("Panic data size %d is too "
- "large, truncating to %d\n",
- pdata_size, args->response_max);
- pdata_size = args->response_max;
- pdata_ptr->flags |= PANIC_DATA_FLAG_TRUNCATED;
- }
- memcpy(args->response, pdata_ptr, pdata_size);
+ uint32_t pdata_size = get_panic_data_size();
+ uintptr_t pdata_start = get_panic_data_start();
+ struct panic_data * pdata;
+
+ if (pdata_start && pdata_size > 0) {
+ ASSERT(pdata_size <= args->response_max);
+ memcpy(args->response, (void *)pdata_start, pdata_size);
args->response_size = pdata_size;
- /* Data has now been returned */
- pdata_ptr->flags |= PANIC_DATA_FLAG_OLD_HOSTCMD;
+ pdata = panic_get_data();
+ if (pdata) {
+ /* Data has now been returned */
+ pdata->flags |= PANIC_DATA_FLAG_OLD_HOSTCMD;
+ }
}
return EC_RES_SUCCESS;