summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2021-06-08 23:05:46 +0300
committerAnup Patel <anup@brainfault.org>2021-06-11 16:50:16 +0300
commit360ab88569201f8d282cf98546b86b8576b6f2ad (patch)
treeb9381c4b86e5928af6bd0863b3812182390a60ff
parent1da3d80b5bc074fce077adc47c97f3179c0addd9 (diff)
downloadopensbi-360ab88569201f8d282cf98546b86b8576b6f2ad.tar.xz
lib: utils: missing initialization in thead_reset_init
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>
-rw-r--r--lib/utils/reset/fdt_reset_thead.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/utils/reset/fdt_reset_thead.c b/lib/utils/reset/fdt_reset_thead.c
index 95f8c36..9f2fe03 100644
--- a/lib/utils/reset/fdt_reset_thead.c
+++ b/lib/utils/reset/fdt_reset_thead.c
@@ -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);