summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Iacobucci <alexiacobucci@google.com>2023-03-27 17:27:24 +0000
committerAlex Iacobucci <alexiacobucci@google.com>2023-03-27 17:30:16 +0000
commit8a3debf4821de5d0a8933ee228ff3e85c44498ba (patch)
treebcd7f1b7bd87ca375c79beb9f526eec258695b3c
parent6d567f2d699bf25b2b224500ea8b9ed72fc4d4b8 (diff)
downloadaoc-8a3debf4821de5d0a8933ee228ff3e85c44498ba.tar.gz
aoc/alsa: modify free_aoc_audio_service flow
In mmap playback with SSR case, aoc dev be freed first then snd_aoc_pcm_close will hit null pointer access bug: 272960822 Change-Id: I238b7e0c9b755781b6f23907dd52e4ed3b8d6e76 Signed-off-by: yixuanjiang <yixuanjiang@google.com>
-rw-r--r--alsa/aoc_alsa_drv.c3
-rw-r--r--alsa/aoc_alsa_incall.c1
-rw-r--r--alsa/aoc_alsa_pcm.c1
-rw-r--r--alsa/aoc_alsa_voip.c1
4 files changed, 3 insertions, 3 deletions
diff --git a/alsa/aoc_alsa_drv.c b/alsa/aoc_alsa_drv.c
index 7e3f4d7..1d31f97 100644
--- a/alsa/aoc_alsa_drv.c
+++ b/alsa/aoc_alsa_drv.c
@@ -192,6 +192,9 @@ int free_aoc_audio_service(const char *name, struct aoc_service_dev *dev)
goto done;
}
+ if (service_lists[i].dev)
+ service_lists[i].dev->prvdata = NULL;
+
service_lists[i].ref--;
service_lists[i].event_callback = NULL;
service_lists[i].prvdata = NULL;
diff --git a/alsa/aoc_alsa_incall.c b/alsa/aoc_alsa_incall.c
index 2dedcd2..6379de0 100644
--- a/alsa/aoc_alsa_incall.c
+++ b/alsa/aoc_alsa_incall.c
@@ -248,7 +248,6 @@ static int snd_aoc_pcm_close(struct snd_soc_component *component,
return -EINTR;
}
- alsa_stream->dev->prvdata = NULL;
runtime = substream->runtime;
alsa_stream = runtime->private_data;
diff --git a/alsa/aoc_alsa_pcm.c b/alsa/aoc_alsa_pcm.c
index a725d72..1ebcef3 100644
--- a/alsa/aoc_alsa_pcm.c
+++ b/alsa/aoc_alsa_pcm.c
@@ -387,7 +387,6 @@ static int snd_aoc_pcm_close(struct snd_soc_component *component,
return -EINTR;
}
- alsa_stream->dev->prvdata = NULL;
runtime = substream->runtime;
alsa_stream = runtime->private_data;
diff --git a/alsa/aoc_alsa_voip.c b/alsa/aoc_alsa_voip.c
index b8b9ab8..b620945 100644
--- a/alsa/aoc_alsa_voip.c
+++ b/alsa/aoc_alsa_voip.c
@@ -253,7 +253,6 @@ static int snd_aoc_pcm_close(struct snd_soc_component *component,
if (err < 0)
pr_err("ERR: fail in voip call tearing down\n");
- alsa_stream->dev->prvdata = NULL;
runtime = substream->runtime;
alsa_stream = runtime->private_data;