lib: utils: missing initialization in thead_reset_init
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Tue, 8 Jun 2021 20:05:46 +0000 (22:05 +0200)
committerAnup Patel <anup@brainfault.org>
Fri, 11 Jun 2021 13:50:16 +0000 (19:20 +0530)
If property csr-copy does not exist, fdt_getprop() will return NULL and cnt
will have a random value from the stack.

Call clone_csrs() only if cnt is initialized to a non-zero value.

Fixes: 49e422c5ad7a ("lib: utils: reset: Add T-HEAD sample platform reset driver")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
lib/utils/reset/fdt_reset_thead.c

index 95f8c36..9f2fe03 100644 (file)
@@ -62,24 +62,26 @@ static int thead_reset_init(void *fdt, int nodeoff,
        void *p;
        const fdt64_t *val;
        const fdt32_t *val_w;
-       int len, i, cnt;
+       int len, i;
        u32 t, tmp = 0;
 
        /* Prepare clone csrs */
        val_w = fdt_getprop(fdt, nodeoff, "csr-copy", &len);
        if (len > 0 && val_w) {
-               cnt = len / sizeof(fdt32_t);
+               int cnt;
 
+               cnt = len / sizeof(fdt32_t);
                if (cnt > MAX_CUSTOM_CSR)
                        sbi_hart_hang();
 
                for (i = 0; i < cnt; i++) {
                        custom_csr[i].index = fdt32_to_cpu(val_w[i]);
                }
+
+               if (cnt)
+                       clone_csrs(cnt);
        }
 
-       if (cnt)
-               clone_csrs(cnt);
 
        /* Delegate plic enable regs for S-mode */
        val = fdt_getprop(fdt, nodeoff, "plic-delegate", &len);