From: Lukasz Luba <lukasz.luba@arm.com>
To: Karl Mehltretter <kmehltretter@gmail.com>
Cc: Changwoo Min <changwoo@igalia.com>,
"Rafael J . Wysocki" <rafael@kernel.org>,
linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] PM: EM: allocate the cpumask for every perf domain
Date: Mon, 12 Oct 2026 08:58:21 +0100 [thread overview]
Message-ID: <117bc415-6bbb-4739-81b9-d2bf718056ba@arm.com> (raw)
In-Reply-To: <20260910205234.5392-1-kmehltretter@gmail.com>
Hi Karl,
On 9/10/26 21:52, Karl Mehltretter wrote:
> em_create_pd() allocates space for the trailing cpus[] flexible array
> only for CPU devices. A performance domain registered for another
> device therefore has no storage for its cpumask.
>
> All performance domains are added to em_pd_list. The netlink interface
> does not distinguish CPU and non-CPU domains when it calls
> cpumask_weight() or iterates over pd->cpus. A request for a non-CPU
> domain reads cpumask_size() bytes beyond the allocation and can report
> bits from the following memory as CPU attributes.
>
> KASAN reports slab-out-of-bounds reads for both dump and by-ID requests
> against a synthetic non-CPU performance domain.
>
> GET_PERF_DOMAINS does not require GENL_ADMIN_PERM, so an unprivileged
> request can reach this path when a GPU or another devfreq device has
> registered an energy model.
>
> Allocate the cpumask for non-CPU domains too. The zeroed mask remains
> empty, as required for the documented unused field.
>
> Fixes: d8eef0453132 ("PM: EM: Implement em_nl_get_pds_doit()")
> Cc: stable@vger.kernel.org
> Assisted-by: LLM
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
> ---
> kernel/power/energy_model.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/power/energy_model.c b/kernel/power/energy_model.c
> index e610cf8e9a06..fd07c564c201 100644
> --- a/kernel/power/energy_model.c
> +++ b/kernel/power/energy_model.c
> @@ -439,7 +439,9 @@ static int em_create_pd(struct device *dev, int nr_states,
>
> cpumask_copy(em_span_cpus(pd), cpus);
> } else {
> - pd = kzalloc_obj(*pd);
> + /* Readers expect pd->cpus to exist and remain empty. */
> + pd = kzalloc_flex(*pd, cpus,
> + BITS_TO_LONGS(large_cpumask_bits));
> if (!pd)
> return -ENOMEM;
> }
my apologies for the delay.
The patch looks good, thanks for catching this!
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
prev parent reply other threads:[~2026-10-12 7:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-10 20:52 Karl Mehltretter
2026-10-10 10:58 ` Karl Mehltretter
2026-10-12 7:58 ` Lukasz Luba [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=117bc415-6bbb-4739-81b9-d2bf718056ba@arm.com \
--to=lukasz.luba@arm.com \
--cc=changwoo@igalia.com \
--cc=kmehltretter@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®