From 3ed254c18aa7fc24cbc692433729ec3819fc5537 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Thu, 31 Dec 2009 07:13:16 +0800 Subject: [PATCH] ARM7_9: Fix segfaults Handlers for commands - arm7_9 semihosting - $_TARGETNAME arp_reset assert 1 didn't check if target has already been examined, and could segfault when using the NULL pointer "arm7_9->eice_cache". Signed-off-by: Antonio Borneo Signed-off-by: David Brownell --- src/target/arm7_9_common.c | 6 ++++++ src/target/target.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c index e5969806..a09b0ad9 100644 --- a/src/target/arm7_9_common.c +++ b/src/target/arm7_9_common.c @@ -2797,6 +2797,12 @@ COMMAND_HANDLER(handle_arm7_9_semihosting_command) COMMAND_PARSE_ENABLE(CMD_ARGV[0], semihosting); + if (!target_was_examined(target)) + { + LOG_ERROR("Target not examined yet"); + return ERROR_FAIL; + } + if (arm7_9->has_vector_catch) { struct reg *vector_catch = &arm7_9->eice_cache ->reg_list[EICE_VEC_CATCH]; diff --git a/src/target/target.c b/src/target/target.c index 8cb53b36..d3d1beee 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -4079,6 +4079,11 @@ static int jim_target_reset(Jim_Interp *interp, int argc, Jim_Obj *const *argv) struct target *target = Jim_CmdPrivData(goi.interp); if (!target->tap->enabled) return jim_target_tap_disabled(interp); + if (!(target_was_examined(target))) + { + LOG_ERROR("Target not examined yet"); + return ERROR_TARGET_NOT_EXAMINED; + } if (!target->type->assert_reset || !target->type->deassert_reset) { Jim_SetResult_sprintf(interp, -- 2.39.5