Commit b7776a80 authored by Paul Walmsley's avatar Paul Walmsley
Browse files

riscv: hwprobe: avoid uninitialized variable use in hwprobe_arch_id()



Resolve this smatch warning:

  arch/riscv/kernel/sys_hwprobe.c:50 hwprobe_arch_id() error: uninitialized symbol 'cpu_id'.

This could happen if hwprobe_arch_id() was called with a key ID of
something other than MVENDORID, MIMPID, and MARCHID.  This does not
happen in the current codebase.  The only caller of hwprobe_arch_id()
is a function that only passes one of those three key IDs.

For the sake of reducing static analyzer warning noise, and in the
unlikely event that hwprobe_arch_id() is someday called with some
other key ID, validate hwprobe_arch_id()'s input to ensure that
'cpu_id' is always initialized before use.

Fixes: ea3de9ce ("RISC-V: Add a syscall for HW probing")
Cc: Evan Green <evan@rivosinc.com>
Signed-off-by: default avatarPaul Walmsley <pjw@kernel.org>
Link: https://lore.kernel.org/r/cf5a13ec-19d0-9862-059b-943f36107bf3@kernel.org
parent 2dc99ea2
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -31,6 +31,11 @@ static void hwprobe_arch_id(struct riscv_hwprobe *pair,
	bool first = true;
	int cpu;

	if (pair->key != RISCV_HWPROBE_KEY_MVENDORID &&
	    pair->key != RISCV_HWPROBE_KEY_MIMPID &&
	    pair->key != RISCV_HWPROBE_KEY_MARCHID)
		goto out;

	for_each_cpu(cpu, cpus) {
		u64 cpu_id;

@@ -61,6 +66,7 @@ static void hwprobe_arch_id(struct riscv_hwprobe *pair,
		}
	}

out:
	pair->value = id;
}