[alsa-devel] [PATCH] ASoC: Intel: Skylake: Acquire irq after RIRB allocation
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Tue Aug 14 16:50:51 CEST 2018
On 8/13/18 6:15 PM, Yong Zhi wrote:
> 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.
I am not that familiar with PCI gory details but that patch was reviewed
internally with no objections raised; there was also an agreement that
the SOF driver would follow the same sequence, so
Acked-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
>
> 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);
>
>
More information about the Alsa-devel
mailing list