summaryrefslogtreecommitdiff
path: root/sound/hda/codecs/side-codecs/hda_component.c
diff options
context:
space:
mode:
authorDenis Arefev <arefev@swemel.ru>2025-10-09 13:50:47 +0300
committerTakashi Iwai <tiwai@suse.de>2025-10-11 08:28:52 +0200
commit1cf11d80db5df805b538c942269e05a65bcaf5bc (patch)
tree71ef49ea9b47c92572ee17337a43d31fc261fb07 /sound/hda/codecs/side-codecs/hda_component.c
parent8527bbb33936340525a3504a00932b2f8fd75754 (diff)
ALSA: hda: Fix missing pointer check in hda_component_manager_init function
The __component_match_add function may assign the 'matchptr' pointer the value ERR_PTR(-ENOMEM), which will subsequently be dereferenced. The call stack leading to the error looks like this: hda_component_manager_init |-> component_match_add |-> component_match_add_release |-> __component_match_add ( ... ,**matchptr, ... ) |-> *matchptr = ERR_PTR(-ENOMEM); // assign |-> component_master_add_with_match( ... match) |-> component_match_realloc(match, match->num); // dereference Add IS_ERR() check to prevent the crash. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: ae7abe36e352 ("ALSA: hda/realtek: Add CS35L41 support for Thinkpad laptops") Cc: stable@vger.kernel.org Signed-off-by: Denis Arefev <arefev@swemel.ru> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/hda/codecs/side-codecs/hda_component.c')
-rw-r--r--sound/hda/codecs/side-codecs/hda_component.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sound/hda/codecs/side-codecs/hda_component.c b/sound/hda/codecs/side-codecs/hda_component.c
index bcf47a301697..8a2a200600a7 100644
--- a/sound/hda/codecs/side-codecs/hda_component.c
+++ b/sound/hda/codecs/side-codecs/hda_component.c
@@ -174,6 +174,10 @@ int hda_component_manager_init(struct hda_codec *cdc,
sm->match_str = match_str;
sm->index = i;
component_match_add(dev, &match, hda_comp_match_dev_name, sm);
+ if (IS_ERR(match)) {
+ codec_err(cdc, "Fail to add component %ld\n", PTR_ERR(match));
+ return PTR_ERR(match);
+ }
}
ret = component_master_add_with_match(dev, ops, match);