diff options
author | Mikhail Rasputin <mikhail.godlike.rasputin@yandex.ru> | 2020-06-27 23:30:42 +0300 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2020-08-08 22:17:08 +0100 |
commit | 6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac (patch) | |
tree | 6f599a88e4040db4cebe7d3e1ba3224ed71eda4b /src/target | |
parent | 86777768ebef236f1f90a4abb6a6e1487884d753 (diff) | |
download | riscv-openocd-6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac.zip riscv-openocd-6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac.tar.gz riscv-openocd-6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac.tar.bz2 |
target: fix registers reading from non examined target
If a target is not examined when the debugger tries to connect to it
then it can lead to undesired/undefined behavior.
In particular it leads to a zero pointer dereference on the aarch64.
Change-Id: I67f2b714ab8b2727fd36f3de16d7f9017b4c55fe
Signed-off-by: Mikhail Rasputin <mikhail.godlike.rasputin@yandex.ru>
Reviewed-on: http://openocd.zylin.com/5727
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/target.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/target/target.c b/src/target/target.c index b392548..5efa088 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -1224,8 +1224,17 @@ int target_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class) { - int result = target->type->get_gdb_reg_list(target, reg_list, + int result = ERROR_FAIL; + + if (!target_was_examined(target)) { + LOG_ERROR("Target not examined yet"); + goto done; + } + + result = target->type->get_gdb_reg_list(target, reg_list, reg_list_size, reg_class); + +done: if (result != ERROR_OK) { *reg_list = NULL; *reg_list_size = 0; |