Kaynağa Gözat

usb: ehci: fix memory leak in ehci_process_itd

While processing isochronous transfer descriptors(iTD), if the page
select(PG) field value is out of bands it will return. In this
situation the ehci's sg list is not freed thus leading to a memory
leak issue. This patch avoid this.

Signed-off-by: Li Qiang <liqiang6-s@360.cn>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
Li Qiang 9 yıl önce
ebeveyn
işleme
b16c129daf
1 değiştirilmiş dosya ile 1 ekleme ve 0 silme
  1. 1 0
      hw/usb/hcd-ehci.c

+ 1 - 0
hw/usb/hcd-ehci.c

@@ -1426,6 +1426,7 @@ static int ehci_process_itd(EHCIState *ehci,
             if (off + len > 4096) {
             if (off + len > 4096) {
                 /* transfer crosses page border */
                 /* transfer crosses page border */
                 if (pg == 6) {
                 if (pg == 6) {
+                    qemu_sglist_destroy(&ehci->isgl);
                     return -1;  /* avoid page pg + 1 */
                     return -1;  /* avoid page pg + 1 */
                 }
                 }
                 ptr2 = (itd->bufptr[pg + 1] & ITD_BUFPTR_MASK);
                 ptr2 = (itd->bufptr[pg + 1] & ITD_BUFPTR_MASK);