summaryrefslogtreecommitdiff
path: root/include/sound
diff options
context:
space:
mode:
authorCezary Rojewski <cezary.rojewski@intel.com>2022-08-16 14:17:27 +0300
committerTakashi Iwai <tiwai@suse.de>2022-08-18 10:47:19 +0300
commitf2bd1c5ae2cb0cf9525c9bffc0038c12dd7e1338 (patch)
tree9b6269af5c0dd25c5d6b613545f7622dee0246a0 /include/sound
parentfb5987844808bf9abeb23f695e94b75b439daa42 (diff)
downloadlinux-f2bd1c5ae2cb0cf9525c9bffc0038c12dd7e1338.tar.xz
ALSA: hda: Fix page fault in snd_hda_codec_shutdown()
If early probe of HDAudio bus driver fails e.g.: due to missing firmware file, snd_hda_codec_shutdown() ends in manipulating uninitialized codec->pcm_list_head causing page fault. Initialization of HDAudio codec in ASoC is split in two: - snd_hda_codec_device_init() - snd_hda_codec_device_new() snd_hda_codec_device_init() is called during probe_codecs() by HDAudio bus driver while snd_hda_codec_device_new() is called by codec-component's ->probe(). The second call will not happen until all components required by related sound card are present within the ASoC framework. With firmware failing to load during the PCI's deferred initialization i.e.: probe_work(), no platform components are ever registered. HDAudio codec enumeration is done at that point though, so the codec components became registered to ASoC framework, calling snd_hda_codec_device_init() in the process. Now, during platform reboot snd_hda_codec_shutdown() is called for every codec found on the HDAudio bus causing oops if any of them has not completed both of their initialization steps. Relocating field initialization fixes the issue. Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://lore.kernel.org/r/20220816111727.3218543-7-cezary.rojewski@intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'include/sound')
0 files changed, 0 insertions, 0 deletions