merged.

SRCREV updates will follow with my next round of -stable bumps.

Bruce

On Tue, May 14, 2019 at 5:09 AM Liwei Song <liwei.s...@windriver.com> wrote:

> From: Takashi Iwai <ti...@suse.de>
>
> commit f495222e28275222ab6fd93813bd3d462e16d340 upstream.
>
> Currently the IRQ handler in HD-audio controller driver is registered
> before the chip initialization.  That is, we have some window opened
> between the azx_acquire_irq() call and the CORB/RIRB setup.  If an
> interrupt is triggered in this small window, the IRQ handler may
> access to the uninitialized RIRB buffer, which leads to a NULL
> dereference Oops.
>
> This is usually no big problem since most of Intel chips do register
> the IRQ via MSI, and we've already fixed the order of the IRQ
> enablement and the CORB/RIRB setup in the former commit b61749a89f82
> ("sound: enable interrupt after dma buffer initialization"), hence the
> IRQ won't be triggered in that room.  However, some platforms use a
> shared IRQ, and this may allow the IRQ trigger by another source.
>
> Another possibility is the kdump environment: a stale interrupt might
> be present in there, the IRQ handler can be falsely triggered as well.
>
> For covering this small race, let's move the azx_acquire_irq() call
> after hda_intel_init_chip() call.  Although this is a bit radical
> change, it can cover more widely than checking the CORB/RIRB setup
> locally in the callee side.
>
> Reported-by: Liwei Song <liwei.s...@windriver.com>
> Signed-off-by: Takashi Iwai <ti...@suse.de>
> Signed-off-by: Liwei Song <liwei.s...@windriver.com>
> ---
>  sound/pci/hda/hda_intel.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index e5c49003e75f..7aeb5e81aa94 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -1788,9 +1788,6 @@ static int azx_first_init(struct azx *chip)
>                         chip->msi = 0;
>         }
>
> -       if (azx_acquire_irq(chip, 0) < 0)
> -               return -EBUSY;
> -
>         pci_set_master(pci);
>         synchronize_irq(bus->irq);
>
> @@ -1904,6 +1901,9 @@ static int azx_first_init(struct azx *chip)
>                 return -ENODEV;
>         }
>
> +       if (azx_acquire_irq(chip, 0) < 0)
> +               return -EBUSY;
> +
>         strcpy(card->driver, "HDA-Intel");
>         strlcpy(card->shortname, driver_short_names[chip->driver_type],
>                 sizeof(card->shortname));
> --
> 2.7.4
>
>

-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end
- "Use the force Harry" - Gandalf, Star Trek II
-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to