From: Song liwei <liwei.song@windriver.com>
To: <alsa-devel@alsa-project.org>
Cc: Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
Yu Zhao <yuzhao@google.com>, Mark Brown <broonie@kernel.org>,
Keyon Jie <yang.jie@linux.intel.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
LiweiSong <liwei.song@windriver.com>
Subject: [PATCH] ALSA: hda: check RIRB to avoid use NULL pointer
Date: Tue, 30 Apr 2019 02:10:53 -0400 [thread overview]
Message-ID: <1556604653-47363-1-git-send-email-liwei.song@windriver.com> (raw)
From: Liwei Song <liwei.song@windriver.com>
Fix the following BUG:
BUG: unable to handle kernel NULL pointer dereference at 000000000000000c
Workqueue: events azx_probe_work [snd_hda_intel]
RIP: 0010:snd_hdac_bus_update_rirb+0x80/0x160 [snd_hda_core]
Call Trace:
<IRQ>
azx_interrupt+0x78/0x140 [snd_hda_codec]
__handle_irq_event_percpu+0x49/0x300
handle_irq_event_percpu+0x23/0x60
handle_irq_event+0x3c/0x60
handle_edge_irq+0xdb/0x180
handle_irq+0x23/0x30
do_IRQ+0x6a/0x140
common_interrupt+0xf/0xf
The Call Trace happened when run kdump on a NFS rootfs system.
Exist the following calling sequence when boot the second kernel:
azx_first_init()
--> azx_acquire_irq()
<-- interrupt come in, azx_interrupt() was called
--> hda_intel_init_chip()
--> azx_init_chip()
--> snd_hdac_bus_init_chip()
--> snd_hdac_bus_init_cmd_io();
--> init rirb.buf and corb.buf
Interrupt happened after azx_acquire_irq() while RIRB still didn't got
initialized, then NULL pointer will be used when process the interrupt.
Check the value of RIRB to ensure it is not NULL, to aviod some special
case may hang the system.
Fixes: 14752412721c ("ALSA: hda - Add the controller helper codes to hda-core module")
Signed-off-by: Liwei Song <liwei.song@windriver.com>
---
sound/hda/hdac_controller.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
index 74244d8e2909..2f0fa5353361 100644
--- a/sound/hda/hdac_controller.c
+++ b/sound/hda/hdac_controller.c
@@ -195,6 +195,9 @@ void snd_hdac_bus_update_rirb(struct hdac_bus *bus)
return;
bus->rirb.wp = wp;
+ if (!bus->rirb.buf)
+ return;
+
while (bus->rirb.rp != wp) {
bus->rirb.rp++;
bus->rirb.rp %= AZX_MAX_RIRB_ENTRIES;
--
2.7.4
next reply other threads:[~2019-04-30 6:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-30 6:10 Song liwei [this message]
2019-04-30 7:31 ` Takashi Iwai
2019-04-30 8:32 ` Liwei Song
2019-04-30 8:53 ` Takashi Iwai
2019-04-30 9:29 ` Liwei Song
2019-04-30 10:17 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1556604653-47363-1-git-send-email-liwei.song@windriver.com \
--to=liwei.song@windriver.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=perex@perex.cz \
--cc=tiwai@suse.com \
--cc=yang.jie@linux.intel.com \
--cc=yuzhao@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®