• Gregory Herrero's avatar
    usb: dwc2: host: fix use of qtd after free in desc dma mode · 26a19ea6
    Gregory Herrero authored
    When completing non isoc xfer, dwc2_complete_non_isoc_xfer_ddma()
    is relying on qtd->n_desc to process the corresponding number of
    descriptors.
    
    During the processing of these descriptors, qtd could be unlinked
    and freed if xfer is done and urb is no more in progress.
    
    In this case, dwc2_complete_non_isoc_xfer_ddma() will read again
    qtd->n_desc whereas qtd has been freed. This will lead to unpredictable
    results since qtd->n_desc is no more valid value.
    
    To avoid this error, return a result != 0 in dwc2_process_non_isoc_desc(),
    so that dwc2_complete_non_isoc_xfer_ddma() stops desc processing.
    
    This has been seen with Slub debug enabled.
    Acked-by: default avatarJohn Youn <johnyoun@synopsys.com>
    Signed-off-by: default avatarGregory Herrero <gregory.herrero@intel.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    26a19ea6
hcd_ddma.c 33.7 KB