This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/7210

-- gerrit

commit b88e7232f6e527771b4f077dc819b90388e07b91
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Mon Sep 19 15:39:50 2022 +0200

    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.anto...@gmail.com>

diff --git a/src/target/riscv/riscv.c b/src/target/riscv/riscv.c
index dfd6a3e3d4..ae0a7375d6 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)

-- 

Reply via email to