]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mtd: nand: ecc-mxic: Fix use of uninitialized variable ret
authorMikhail Arkhipov <m.arhipov@rosa.ru>
Tue, 8 Apr 2025 21:39:06 +0000 (00:39 +0300)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 29 Apr 2025 09:05:35 +0000 (11:05 +0200)
If ctx->steps is zero, the loop processing ECC steps is skipped,
and the variable ret remains uninitialized. It is later checked
and returned, which leads to undefined behavior and may cause
unpredictable results in user space or kernel crashes.

This scenario can be triggered in edge cases such as misconfigured
geometry, ECC engine misuse, or if ctx->steps is not validated
after initialization.

Initialize ret to zero before the loop to ensure correct and safe
behavior regardless of the ctx->steps value.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 48e6633a9fa2 ("mtd: nand: mxic-ecc: Add Macronix external ECC engine support")
Signed-off-by: Mikhail Arkhipov <m.arhipov@rosa.ru>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/ecc-mxic.c

index 56b56f726b99837fa6ace2ca2947317e0ca0ad7a..1bf9a5a64b87a45a0cb81a83daa806b4b57d026e 100644 (file)
@@ -614,7 +614,7 @@ static int mxic_ecc_finish_io_req_external(struct nand_device *nand,
 {
        struct mxic_ecc_engine *mxic = nand_to_mxic(nand);
        struct mxic_ecc_ctx *ctx = nand_to_ecc_ctx(nand);
-       int nents, step, ret;
+       int nents, step, ret = 0;
 
        if (req->mode == MTD_OPS_RAW)
                return 0;