target/riscv: fix use of uninitialized value
Scan-build reports: Logic error: Uninitialized argument value riscv.c:2688 2nd function call argument is an uninitialized value This is a real error cause by running the command "riscv authdata_write" without arguments. In such case 'value' is not initialized and is passed to and used by r->authdata_write(). Reorganize the code to: - detect the correct amount or command's arguments; - drop the LOG_ERROR() on ERROR_COMMAND_SYNTAX_ERROR; - drop the 'else' after 'return'. Change-Id: I62e031220593b8308bc674b753e15d16d4c5c9ac Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7210 Tested-by: jenkins Reviewed-by: Jan Matyas <matyas@codasip.com> Reviewed-by: Tim Newsome <tim@sifive.com>
This commit is contained in:
parent
fd2a44ab55
commit
44ed26a1db
|
@ -2666,27 +2666,25 @@ COMMAND_HANDLER(riscv_authdata_write)
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
unsigned int index = 0;
|
unsigned int index = 0;
|
||||||
|
|
||||||
if (CMD_ARGC == 0) {
|
if (CMD_ARGC == 0 || CMD_ARGC > 2)
|
||||||
/* nop */
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
} else if (CMD_ARGC == 1) {
|
|
||||||
|
if (CMD_ARGC == 1) {
|
||||||
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], value);
|
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], value);
|
||||||
} else if (CMD_ARGC == 2) {
|
} else {
|
||||||
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], index);
|
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[0], index);
|
||||||
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
|
COMMAND_PARSE_NUMBER(u32, CMD_ARGV[1], value);
|
||||||
} else {
|
|
||||||
LOG_ERROR("Command takes at most 2 arguments");
|
|
||||||
return ERROR_COMMAND_SYNTAX_ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct target *target = get_current_target(CMD_CTX);
|
struct target *target = get_current_target(CMD_CTX);
|
||||||
RISCV_INFO(r);
|
RISCV_INFO(r);
|
||||||
|
|
||||||
if (r->authdata_write) {
|
if (!r->authdata_write) {
|
||||||
return r->authdata_write(target, value, index);
|
|
||||||
} else {
|
|
||||||
LOG_ERROR("authdata_write is not implemented for this target.");
|
LOG_ERROR("authdata_write is not implemented for this target.");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return r->authdata_write(target, value, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
COMMAND_HANDLER(riscv_dmi_read)
|
COMMAND_HANDLER(riscv_dmi_read)
|
||||||
|
|
Loading…
Reference in New Issue