[PATCH 0/6] ASoC: codecs: Fix resource leaks on card re-bind

Chancel Liu posted 6 patches 1 week, 5 days ago
sound/soc/codecs/cs42l52.c       |  9 ++++--
sound/soc/codecs/cs42l56.c       |  9 ++++--
sound/soc/codecs/tlv320aic31xx.c | 30 +++++++++---------
sound/soc/codecs/tlv320aic3x.c   | 28 ++++++++---------
sound/soc/codecs/wm8962.c        | 52 +++++++++++++++++---------------
sound/soc/codecs/wm8995.c        | 41 ++++++++++++++++---------
6 files changed, 96 insertions(+), 73 deletions(-)
[PATCH 0/6] ASoC: codecs: Fix resource leaks on card re-bind
Posted by Chancel Liu 1 week, 5 days ago
From: Chancel Liu <chancel.liu@nxp.com>

Several ASoC codec drivers set up per-device resources from their ASoC
component probe, but the associated cleanup is tied to the underlying bus
(I2C/SPI) device rather than being balanced per component probe. This is
fine for a plain probe/remove, but it breaks when the sound card is
unregistered and re-registered while the bus device stays bound (a card
re-bind): the component probe runs again while the previous bus-level
resources are still live.

Two kinds of resources are affected:

- Regulator disable notifiers (wm8962, wm8995, tlv320aic31xx,
  tlv320aic3x)
  The same notifier_block is re-registered on the
  still-registered regulator notifier chain, which triggers

    notifier callback ..._regulator_event_N already registered
    WARNING: ... at kernel/notifier.c:23 notifier_chain_register

  and corrupts the chain.

- Beep input devices (wm8962, cs42l52, cs42l56)
  A new input device is allocated and registered on every component
  probe while the free path only clears the pointer, leaking the
  previous input device and its sysfs/input node.

The two problems need opposite fixes: the notifiers are registered from
the component probe, so the registration is moved to the bus probe so it
runs once per bus bind; the beep device is freed from the component
remove path, so it is switched from devm_input_allocate_device() to
input_allocate_device() paired with an explicit
input_unregister_device() on that same free path.

Verified with wm8962. The remaining patches fix other codec drivers
following the same patterns.

Chancel Liu (6):
  ASoC: wm8962: Fix regulator notifier and beep leaks on card re-bind
  ASoC: wm8995: Register regulator notifiers from the bus probe
  ASoC: tlv320aic31xx: Register regulator notifier from the I2C probe
  ASoC: tlv320aic3x: Register regulator notifier from the bus probe
  ASoC: cs42l52: Fix beep input device leak on card re-bind
  ASoC: cs42l56: Fix beep input device leak on card re-bind

 sound/soc/codecs/cs42l52.c       |  9 ++++--
 sound/soc/codecs/cs42l56.c       |  9 ++++--
 sound/soc/codecs/tlv320aic31xx.c | 30 +++++++++---------
 sound/soc/codecs/tlv320aic3x.c   | 28 ++++++++---------
 sound/soc/codecs/wm8962.c        | 52 +++++++++++++++++---------------
 sound/soc/codecs/wm8995.c        | 41 ++++++++++++++++---------
 6 files changed, 96 insertions(+), 73 deletions(-)

--
2.50.1
Re: [PATCH 0/6] ASoC: codecs: Fix resource leaks on card re-bind
Posted by Mark Brown 1 week, 3 days ago
On Sun, 13 Sep 2026 19:15:25 +0900, Chancel Liu wrote:
> ASoC: codecs: Fix resource leaks on card re-bind
> 
> From: Chancel Liu <chancel.liu@nxp.com>
> 
> Several ASoC codec drivers set up per-device resources from their ASoC
> component probe, but the associated cleanup is tied to the underlying bus
> (I2C/SPI) device rather than being balanced per component probe. This is
> fine for a plain probe/remove, but it breaks when the sound card is
> unregistered and re-registered while the bus device stays bound (a card
> re-bind): the component probe runs again while the previous bus-level
> resources are still live.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.4

Thanks!

[1/6] ASoC: wm8962: Fix regulator notifier and beep leaks on card re-bind
      https://git.kernel.org/broonie/sound/c/b9e5343ba72a
[2/6] ASoC: wm8995: Register regulator notifiers from the bus probe
      https://git.kernel.org/broonie/sound/c/644914663c9f
[3/6] ASoC: tlv320aic31xx: Register regulator notifier from the I2C probe
      https://git.kernel.org/broonie/sound/c/10e2ccaae497
[4/6] ASoC: tlv320aic3x: Register regulator notifier from the bus probe
      https://git.kernel.org/broonie/sound/c/3efb5b99f642
[5/6] ASoC: cs42l52: Fix beep input device leak on card re-bind
      https://git.kernel.org/broonie/sound/c/115a5655bcbb
[6/6] ASoC: cs42l56: Fix beep input device leak on card re-bind
      https://git.kernel.org/broonie/sound/c/c5907dcc13ad

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark