Commit fca7401f authored by Shuhao Fu's avatar Shuhao Fu Committed by Takashi Iwai
Browse files

ALSA: hda: cs35l41: Put ACPI device on missing physical node



acpi_dev_get_first_match_dev() returns a refcounted ACPI device and
callers must balance it with acpi_dev_put().

cs35l41_hda_read_acpi() stores the returned ACPI device in
cs35l41->dacpi. That reference is normally released by the later
probe cleanup or the remove path, but the NULL-check on
physdev exits before either of those paths can run.

Drop the lookup reference before returning -ENODEV.

Fixes: c34b04cc ("ALSA: hda: cs35l41: Fix NULL pointer dereference in cs35l41_hda_read_acpi()")
Signed-off-by: default avatarShuhao Fu <sfual@cse.ust.hk>
Tested-by: default avatarSimon Trimmer <simont@opensource.cirrus.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20260428081238.GA1659932@chcpu16
parent aa2fbece
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1896,8 +1896,10 @@ static int cs35l41_hda_read_acpi(struct cs35l41_hda *cs35l41, const char *hid, i

	cs35l41->dacpi = adev;
	physdev = get_device(acpi_get_first_physical_node(adev));
	if (!physdev)
	if (!physdev) {
		acpi_dev_put(adev);
		return -ENODEV;
	}

	sub = acpi_get_subsystem_id(ACPI_HANDLE(physdev));
	if (IS_ERR(sub))