Commit 067cdf02 authored by Eugen Hristev's avatar Eugen Hristev Committed by Kees Cook
Browse files

pstore/zone: avoid dereferencing zero sized ptr after init zones



In psz_init_zones, if the requested area has a total_size less than
record_size, kcalloc will be called with c == 0 and will return
ZERO_SIZE_PTR.
Further, this will lead to an oops.

With this patch, in this scenario, it will look like this :
[    6.865545] pstore_zone:     total size : 28672 Bytes
[    6.865547] pstore_zone:     kmsg size : 65536 Bytes
[    6.865549] pstore_zone:     pmsg size : 0 Bytes
[    6.865551] pstore_zone:     console size : 0 Bytes
[    6.865553] pstore_zone:     ftrace size : 0 Bytes
[    6.872095] pstore_zone: zone dmesg total_size too small
[    6.878234] pstore_zone: alloc zones failed

Signed-off-by: default avatarEugen Hristev <eugen.hristev@linaro.org>
Link: https://lore.kernel.org/r/20250110125714.2594719-1-eugen.hristev@linaro.org


Signed-off-by: default avatarKees Cook <kees@kernel.org>
parent 542243af
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1212,6 +1212,11 @@ static struct pstore_zone **psz_init_zones(enum pstore_type_id type,
	}

	c = total_size / record_size;
	if (unlikely(!c)) {
		pr_err("zone %s total_size too small\n", name);
		return ERR_PTR(-EINVAL);
	}

	zones = kcalloc(c, sizeof(*zones), GFP_KERNEL);
	if (!zones) {
		pr_err("allocate for zones %s failed\n", name);