]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
audio: intel-hda: check stream entry count during transfer
authorPrasad J Pandit <pjp@fedoraproject.org>
Thu, 20 Oct 2016 07:40:24 +0000 (13:10 +0530)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 26 Oct 2016 12:51:44 +0000 (14:51 +0200)
Intel HDA emulator uses stream of buffers during DMA data
transfers. Each entry has buffer length and buffer pointer
position, which are used to derive bytes to 'copy'. If this
length and buffer pointer were to be same, 'copy' could be
set to zero(0), leading to an infinite loop. Add check to
avoid it.

Reported-by: Huawei PSIRT <psirt@huawei.com>
Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1476949224-6865-1-git-send-email-ppandit@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/audio/intel-hda.c

index cd95340cd9987b77b1f70bab18e5d8a314146ee4..537face94d8e1ea4d6a48fa5b31a7099a9f3974b 100644 (file)
@@ -416,7 +416,8 @@ static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output,
     }
 
     left = len;
-    while (left > 0) {
+    s = st->bentries;
+    while (left > 0 && s-- > 0) {
         copy = left;
         if (copy > st->bsize - st->lpib)
             copy = st->bsize - st->lpib;