[<prev] [next>] [day] [month] [year] [list]
Message-ID: <2025120902-CVE-2023-53854-be24@gregkh>
Date: Tue, 9 Dec 2025 10:31:38 +0900
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-cve-announce@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...nel.org>
Subject: CVE-2023-53854: ASoC: mediatek: mt8186: Fix use-after-free in driver remove path
From: Greg Kroah-Hartman <gregkh@...nel.org>
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
ASoC: mediatek: mt8186: Fix use-after-free in driver remove path
When devm runs function in the "remove" path for a device it runs them
in the reverse order. That means that if you have parts of your driver
that aren't using devm or are using "roll your own" devm w/
devm_add_action_or_reset() you need to keep that in mind.
The mt8186 audio driver didn't quite get this right. Specifically, in
mt8186_init_clock() it called mt8186_audsys_clk_register() and then
went on to call a bunch of other devm function. The caller of
mt8186_init_clock() used devm_add_action_or_reset() to call
mt8186_deinit_clock() but, because of the intervening devm functions,
the order was wrong.
Specifically at probe time, the order was:
1. mt8186_audsys_clk_register()
2. afe_priv->clk = devm_kcalloc(...)
3. afe_priv->clk[i] = devm_clk_get(...)
At remove time, the order (which should have been 3, 2, 1) was:
1. mt8186_audsys_clk_unregister()
3. Free all of afe_priv->clk[i]
2. Free afe_priv->clk
The above seemed to be causing a use-after-free. Luckily, it's easy to
fix this by simply using devm more correctly. Let's move the
devm_add_action_or_reset() to the right place. In addition to fixing
the use-after-free, code inspection shows that this fixes a leak
(missing call to mt8186_audsys_clk_unregister()) that would have
happened if any of the syscon_regmap_lookup_by_phandle() calls in
mt8186_init_clock() had failed.
The Linux kernel CVE team has assigned CVE-2023-53854 to this issue.
Affected and fixed versions
===========================
Issue introduced in 6.0 with commit 55b423d5623ccd6785429431c2cf5f3e073b73ba and fixed in 6.1.30 with commit 3e56a1c04882852e3e7d6c59756a16211ebbc457
Issue introduced in 6.0 with commit 55b423d5623ccd6785429431c2cf5f3e073b73ba and fixed in 6.3.4 with commit dffd9e2b57cb845930fa885aa634a847ba2130dd
Issue introduced in 6.0 with commit 55b423d5623ccd6785429431c2cf5f3e073b73ba and fixed in 6.4 with commit a93d2afd3f77a7331271a0f25c6a11003db69b3c
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2023-53854
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
sound/soc/mediatek/mt8186/mt8186-afe-clk.c
sound/soc/mediatek/mt8186/mt8186-afe-clk.h
sound/soc/mediatek/mt8186/mt8186-afe-pcm.c
sound/soc/mediatek/mt8186/mt8186-audsys-clk.c
sound/soc/mediatek/mt8186/mt8186-audsys-clk.h
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/3e56a1c04882852e3e7d6c59756a16211ebbc457
https://git.kernel.org/stable/c/dffd9e2b57cb845930fa885aa634a847ba2130dd
https://git.kernel.org/stable/c/a93d2afd3f77a7331271a0f25c6a11003db69b3c
Powered by blists - more mailing lists