]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[efi] Leave asynchronous USB endpoints open until device is removed
authorMichael Brown <mcb30@ipxe.org>
Sun, 3 Jan 2021 19:12:41 +0000 (19:12 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 3 Jan 2021 20:23:51 +0000 (20:23 +0000)
commit5aa389593dded9a45a2d2b83f3c1c65b2770fb82
treec89e3b4c015795f20ad6f8d583881994a65c5435
parent7ce3b8405002ac58c4c2d24b90a601b1802c1d83
[efi] Leave asynchronous USB endpoints open until device is removed

Some UEFI device drivers will react to an asynchronous USB transfer
failure by dubiously terminating the scheduled transfer from within
the completion handler.

We already have code from commit fbb776f ("[efi] Leave USB endpoint
descriptors in existence until device is removed") that avoids freeing
memory in this situation, in order to avoid use-after-free bugs.  This
is not sufficient to avoid potential problems, since with an xHCI
controller the act of closing the endpoint requires issuing a command
and awaiting completion via the event ring, which may in turn dispatch
further USB transfer completion events.

Avoid these problems by leaving the USB endpoint open (but with the
refill timer stopped) until the device is finally removed, as is
already done for control and bulk transfers.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_usb.c