From: Antonio Borneo Date: Mon, 19 Sep 2022 13:39:50 +0000 (+0200) Subject: target/riscv: fix use of uninitialized value X-Git-Url: https://git.gag.com/?p=fw%2Fopenocd;a=commitdiff_plain;h=44ed26a1db3b9e0ca9dc1000e967533b1c371ee3 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 Reviewed-on: https://review.openocd.org/c/openocd/+/7210 Tested-by: jenkins Reviewed-by: Jan Matyas Reviewed-by: Tim Newsome --- diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c index dfd6a3e3d..ae0a7375d 100644 --- a/src/target/riscv/riscv.c +++ b/src/target/riscv/riscv.c @@ -2666,27 +2666,25 @@ COMMAND_HANDLER(riscv_authdata_write) uint32_t value; unsigned int index = 0; - if (CMD_ARGC == 0) { - /* nop */ - } else if (CMD_ARGC == 1) { + if (CMD_ARGC == 0 || CMD_ARGC > 2) + return ERROR_COMMAND_SYNTAX_ERROR; + + if (CMD_ARGC == 1) { 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(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); RISCV_INFO(r); - if (r->authdata_write) { - return r->authdata_write(target, value, index); - } else { + if (!r->authdata_write) { LOG_ERROR("authdata_write is not implemented for this target."); return ERROR_FAIL; } + + return r->authdata_write(target, value, index); } COMMAND_HANDLER(riscv_dmi_read)