mtd: rawnand: fsmc: Fix unchecked return value in fsmc_read_page_hwecc
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Wed, 10 Oct 2018 15:58:58 +0000 (17:58 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 5 Nov 2018 09:56:58 +0000 (10:56 +0100)
Check return value of nand_read_data_op.

Notice that, currently, all instances of nand_read_data_op() are
being checked, with the exception of two of them in marvell_nand
driver, in which the caller function explicitly returns 0 every
time.

Also, notice that I moved the declaration of *ret* to the top of
fsmc_read_page_hwecc().

Addresses-Coverity-ID: 1471968 ("Unchecked return value")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/fsmc_nand.c

index 70ac8d8..41ba76e 100644 (file)
@@ -727,7 +727,7 @@ static int fsmc_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
        uint8_t *p = buf;
        uint8_t *ecc_calc = chip->ecc.calc_buf;
        uint8_t *ecc_code = chip->ecc.code_buf;
-       int off, len, group = 0;
+       int off, len, ret, group = 0;
        /*
         * ecc_oob is intentionally taken as uint16_t. In 16bit devices, we
         * end up reading 14 bytes (7 words) from oob. The local array is
@@ -740,11 +740,12 @@ static int fsmc_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
        for (i = 0, s = 0; s < eccsteps; s++, i += eccbytes, p += eccsize) {
                nand_read_page_op(chip, page, s * eccsize, NULL, 0);
                chip->ecc.hwctl(chip, NAND_ECC_READ);
-               nand_read_data_op(chip, p, eccsize, false);
+               ret = nand_read_data_op(chip, p, eccsize, false);
+               if (ret)
+                       return ret;
 
                for (j = 0; j < eccbytes;) {
                        struct mtd_oob_region oobregion;
-                       int ret;
 
                        ret = mtd_ooblayout_ecc(mtd, group++, &oobregion);
                        if (ret)