audio_hw: Prevent referencing input devices from empty list
authorVasyl Gello <vasek.gello@gmail.com>
Sun, 1 Jul 2018 07:57:35 +0000 (10:57 +0300)
committerJan Altensen <info@stricted.net>
Tue, 5 Feb 2019 19:08:28 +0000 (20:08 +0100)
Fixes audioserver crash in in_get_capture_position() if PCM input
device was not properly opened.

Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>
Change-Id: I2f2d9bc8151cf61af112a9544268513effacacb5

audio/audio_hw.c

index fd9c0b00e10709e45d0ad3be8c0c6e6176fa34b8..712d3f801b67d374a7b67affba1c69c4d91e6960 100644 (file)
@@ -1181,6 +1181,11 @@ static int32_t update_echo_reference(struct stream_in *in, size_t frames)
     b.delay_ns = 0;
     struct pcm_device *pcm_device;
 
+    if (list_empty(&in->pcm_dev_list)) {
+        ALOGW("%s: pcm device list empty", __func__);
+        return b.delay_ns;
+    }
+
     pcm_device = node_to_item(list_head(&in->pcm_dev_list),
                               struct pcm_device, stream_list_node);
 
@@ -3485,6 +3490,11 @@ static int in_get_capture_position(const struct audio_stream_in *stream,
     struct pcm_device *pcm_device;
     int ret = -ENOSYS;
 
+    if (list_empty(&in->pcm_dev_list)) {
+        ALOGW("%s: pcm device list empty", __func__);
+        return -ENODEV;
+    }
+
     pcm_device = node_to_item(list_head(&in->pcm_dev_list),
                               struct pcm_device, stream_list_node);