diff options
author | yixuanjiang <yixuanjiang@google.com> | 2023-05-18 16:43:44 +0800 |
---|---|---|
committer | Yixuan Jiang <yixuanjiang@google.com> | 2023-05-18 09:47:40 +0000 |
commit | 38f97f5e0d250fc19a2338d4d33ecef0c30d8071 (patch) | |
tree | 67342e08638bc43e03449cd94f1251168b95d555 | |
parent | 85686ecbeb957744db1e357063135f4c585d4adb (diff) | |
download | aoc-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.c | 12 |
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); |