[alsa-devel] [PATCH] ASoC: Intel: Skylake: Acquire irq after RIRB allocation
Yong Zhi
yong.zhi at intel.com
Tue Aug 14 01:15:14 CEST 2018
Cold reboot stress test found that the hda irq could access rirb ring
buffer before its memory gets allocated which resulting in null
pointer dereference inside snd_hdac_bus_update_rirb().
Fix it by moving the skl_acquire_irq after ring buffer allocation.
While here, also change err return from -EBUSY to actual error code.
Signed-off-by: Yong Zhi <yong.zhi at intel.com>
---
sound/soc/intel/skylake/skl.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c
index dce649485649..cf09721ca13e 100644
--- a/sound/soc/intel/skylake/skl.c
+++ b/sound/soc/intel/skylake/skl.c
@@ -838,11 +838,7 @@ static int skl_first_init(struct hdac_bus *bus)
snd_hdac_bus_parse_capabilities(bus);
- if (skl_acquire_irq(bus, 0) < 0)
- return -EBUSY;
-
pci_set_master(pci);
- synchronize_irq(bus->irq);
gcap = snd_hdac_chip_readw(bus, GCAP);
dev_dbg(bus->dev, "chipset global capabilities = 0x%x\n", gcap);
@@ -875,6 +871,12 @@ static int skl_first_init(struct hdac_bus *bus)
if (err < 0)
return err;
+ err = skl_acquire_irq(bus, 0);
+ if (err < 0)
+ return err;
+
+ synchronize_irq(bus->irq);
+
/* initialize chip */
skl_init_pci(skl);
--
2.7.4
More information about the Alsa-devel
mailing list