Fix posible null deref in get_target_type

A null deref occurs if riscv_deinit_target is called and the
target has not been initialized.

Change-Id: Ic34057508ed6686eb48e9fe8220110c42ba2fc5e
This commit is contained in:
Dan Robertson 2018-05-22 02:44:01 +00:00
parent bb86173f37
commit 0493ff81a1
No known key found for this signature in database
GPG Key ID: 45C4A652C47E42A5
1 changed files with 10 additions and 3 deletions

View File

@ -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;
}