Commit 594813ff authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Don't call vmaster hook when bus->shutdown is set

The flag bus->shutdown implies that the control elements might have
been already destroyed.  When a codec is resumed at this state and
tries to call vmaster hook (e.g. in snd_hda_gen_init()), it would
refer to a non-existing object, resulting in Oops in the end.

This patch just adds a check of the flag in the caller side for
avoiding such a crash.

Though, the best would be to clear hook->sw_kctl by the destructor of
the corresponding ctl element, but vmaster uses its own private_free,
it can't be done easily.  So let it be for a while.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 83f26ad2
...@@ -2784,6 +2784,11 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook) ...@@ -2784,6 +2784,11 @@ void snd_hda_sync_vmaster_hook(struct hda_vmaster_mute_hook *hook)
{ {
if (!hook->hook || !hook->codec) if (!hook->hook || !hook->codec)
return; return;
/* don't call vmaster hook in the destructor since it might have
* been already destroyed
*/
if (hook->codec->bus->shutdown)
return;
switch (hook->mute_mode) { switch (hook->mute_mode) {
case HDA_VMUTE_FOLLOW_MASTER: case HDA_VMUTE_FOLLOW_MASTER:
snd_ctl_sync_vmaster_hook(hook->sw_kctl); snd_ctl_sync_vmaster_hook(hook->sw_kctl);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment