This is an automated email from Gerrit.

Tomas Vanek (van...@fbl.cz) just uploaded a new patch set to Gerrit, which you 
can find at http://openocd.zylin.com/5518

-- gerrit

commit 6718239324d9d5de125271be05883cc0b84864ca
Author: Tomas Vanek <van...@fbl.cz>
Date:   Fri Mar 13 12:10:50 2020 +0100

    flash/nand/core: fix clang static analyzer warning
    
    core.c:446:
    The left operand of '>>' is a garbage value
    
    There are many places where an error code returned from nand->controller
    operations are ignored. To keep the change minimal, the error checks are
    added only to reading of extended nand info as it was suspected
    to be the cause of the warning.
    
    Addition of the error checks did not fix the warning.
    scan-build-9 report was inspected and IMHO the warning is bogus:
    the term (nand->device->erase_size == 0) cannot give false at line 395
    and then evaluate true at line 462. Fixed by zeroing id_buff.
    
    Change-Id: I97ed7ce0fdf1aa23d746d5fb898bacd050e20ae8
    Signed-off-by: Tomas Vanek <van...@fbl.cz>

diff --git a/src/flash/nand/core.c b/src/flash/nand/core.c
index b9ac793..baef5d5 100644
--- a/src/flash/nand/core.c
+++ b/src/flash/nand/core.c
@@ -263,6 +263,7 @@ int nand_read_status(struct nand_device *nand, uint8_t 
*status)
                return ERROR_NAND_DEVICE_NOT_PROBED;
 
        /* Send read status command */
+       /* FIXME: errors returned from nand->controller are mostly ignored! */
        nand->controller->command(nand, NAND_CMD_STATUS);
 
        alive_sleep(1);
@@ -301,7 +302,8 @@ static int nand_poll_ready(struct nand_device *nand, int 
timeout)
 int nand_probe(struct nand_device *nand)
 {
        uint8_t manufacturer_id, device_id;
-       uint8_t id_buff[6];
+       uint8_t id_buff[6] = { 0 };     /* zero buff to silence false warning
+                                        * from clang static analyzer */
        int retval;
        int i;
 
@@ -392,19 +394,34 @@ int nand_probe(struct nand_device *nand)
        if (nand->device->page_size == 0 ||
                        nand->device->erase_size == 0) {
                if (nand->bus_width == 8) {
-                       nand->controller->read_data(nand, id_buff + 3);
-                       nand->controller->read_data(nand, id_buff + 4);
-                       nand->controller->read_data(nand, id_buff + 5);
+                       retval = nand->controller->read_data(nand, id_buff + 3);
+                       if (retval != ERROR_OK)
+                               return retval;
+
+                       retval = nand->controller->read_data(nand, id_buff + 4);
+                       if (retval != ERROR_OK)
+                               return retval;
+
+                       retval = nand->controller->read_data(nand, id_buff + 5);
+                       if (retval != ERROR_OK)
+                               return retval;
+
                } else {
                        uint16_t data_buf;
 
-                       nand->controller->read_data(nand, &data_buf);
+                       retval = nand->controller->read_data(nand, &data_buf);
+                       if (retval != ERROR_OK)
+                               return retval;
                        id_buff[3] = data_buf;
 
-                       nand->controller->read_data(nand, &data_buf);
+                       retval = nand->controller->read_data(nand, &data_buf);
+                       if (retval != ERROR_OK)
+                               return retval;
                        id_buff[4] = data_buf;
 
-                       nand->controller->read_data(nand, &data_buf);
+                       retval = nand->controller->read_data(nand, &data_buf);
+                       if (retval != ERROR_OK)
+                               return retval;
                        id_buff[5] = data_buf >> 8;
                }
        }

-- 


_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to