diff options
author | Tim Newsome <tim@sifive.com> | 2018-05-22 12:00:40 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-22 12:00:40 -0700 |
commit | 6875379089a6d5de41a9f879872f73e86b88fca2 (patch) | |
tree | a979c63b2615372ab148c4d3c6c5bc8a14433368 | |
parent | bb86173f37c11d1ea305b3e45d6abdaf3d239512 (diff) | |
parent | 0493ff81a1057d299076ee585e79d1b0e0a2fe21 (diff) | |
download | riscv-openocd-6875379089a6d5de41a9f879872f73e86b88fca2.zip riscv-openocd-6875379089a6d5de41a9f879872f73e86b88fca2.tar.gz riscv-openocd-6875379089a6d5de41a9f879872f73e86b88fca2.tar.bz2 |
Merge pull request #260 from dlrobertson/fix_segfault
Fix posible null deref in get_target_type
-rw-r--r-- | src/target/riscv/riscv.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index b171469..88d4b92 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -232,6 +232,11 @@ static struct target_type *get_target_type(struct target *target) { riscv_info_t *info = (riscv_info_t *) target->arch_info; + if (!info) { + LOG_ERROR("Target has not been initialized"); + return NULL; + } + switch (info->dtm_version) { case 0: return &riscv011_target; @@ -265,9 +270,11 @@ static void riscv_deinit_target(struct target *target) { LOG_DEBUG("riscv_deinit_target()"); struct target_type *tt = get_target_type(target); - tt->deinit_target(target); - riscv_info_t *info = (riscv_info_t *) target->arch_info; - free(info); + if (tt) { + tt->deinit_target(target); + riscv_info_t *info = (riscv_info_t *) target->arch_info; + free(info); + } target->arch_info = NULL; } |