summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryixuanjiang <yixuanjiang@google.com>2023-05-18 16:43:44 +0800
committerYixuan Jiang <yixuanjiang@google.com>2023-05-18 09:47:40 +0000
commit38f97f5e0d250fc19a2338d4d33ecef0c30d8071 (patch)
tree67342e08638bc43e03449cd94f1251168b95d555
parent85686ecbeb957744db1e357063135f4c585d4adb (diff)
downloadaoc-38f97f5e0d250fc19a2338d4d33ecef0c30d8071.tar.gz
aoc/alsa: Check dev data within service_lock
Prevent hit NULL pointer during aoc crash. Bug: 282328516 Change-Id: Iad9358fe1ce7731279385294425a6f795bc5ec48 Signed-off-by: yixuanjiang <yixuanjiang@google.com>
-rw-r--r--alsa/aoc_alsa_drv.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/alsa/aoc_alsa_drv.c b/alsa/aoc_alsa_drv.c
index 870bd88..1bafaf0 100644
--- a/alsa/aoc_alsa_drv.c
+++ b/alsa/aoc_alsa_drv.c
@@ -114,11 +114,15 @@ static void audio_set_isr(struct aoc_service_dev *dev)
void audio_free_isr(struct aoc_service_dev *dev)
{
- if ( dev->mbox_index == PCM_CHANNEL || dev->mbox_index == INCALL_CHANNEL ||
- dev->mbox_index == HIFI_CHANNEL || dev->mbox_index == VOIP_CHANNEL) {
- pr_notice("%s free interrupt handler\n", dev_name(&dev->dev));
- dev->handler = NULL;
+ spin_lock(&service_lock);
+ if (dev) {
+ if (dev->mbox_index == PCM_CHANNEL || dev->mbox_index == INCALL_CHANNEL ||
+ dev->mbox_index == HIFI_CHANNEL || dev->mbox_index == VOIP_CHANNEL) {
+ pr_notice("%s free interrupt handler\n", dev_name(&dev->dev));
+ dev->handler = NULL;
+ }
}
+ spin_unlock(&service_lock);
}
EXPORT_SYMBOL_GPL(audio_free_isr);