Skip to content

Commit b986d29

Browse files
authored
Fix segfault in riscv_deinit_target(). (#306)
This would happen when OpenOCD is unable to connect to the JTAG device. Change-Id: I1785fd5f5a20db9b4b574bdddfe3eab9bdc0b0bc
1 parent 35eed36 commit b986d29

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/target/riscv/riscv.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -280,12 +280,17 @@ static void riscv_deinit_target(struct target *target)
280280
free(info);
281281
}
282282
/* Free the shared structure use for most registers. */
283-
free(target->reg_cache->reg_list[0].arch_info);
284-
/* Free the ones we allocated separately. */
285-
for (unsigned i = GDB_REGNO_COUNT; i < target->reg_cache->num_regs; i++)
286-
free(target->reg_cache->reg_list[i].arch_info);
287-
free(target->reg_cache->reg_list);
288-
free(target->reg_cache);
283+
if (target->reg_cache) {
284+
if (target->reg_cache->reg_list) {
285+
if (target->reg_cache->reg_list[0].arch_info)
286+
free(target->reg_cache->reg_list[0].arch_info);
287+
/* Free the ones we allocated separately. */
288+
for (unsigned i = GDB_REGNO_COUNT; i < target->reg_cache->num_regs; i++)
289+
free(target->reg_cache->reg_list[i].arch_info);
290+
free(target->reg_cache->reg_list);
291+
}
292+
free(target->reg_cache);
293+
}
289294
target->arch_info = NULL;
290295
}
291296

0 commit comments

Comments
 (0)