From ada270cd18723c575120c379d0234a1eafeba3dc Mon Sep 17 00:00:00 2001 From: "Hongren (Zenithal) Zheng" Date: Mon, 13 Jun 2022 20:14:19 +0800 Subject: [PATCH] hw/usb/canokey: Fix CCID ZLP CCID could send zero-length packet (ZLP) if we invoke two data_in, two packets would be concated and we could not distinguish them. The CANOKEY_EMU_EP_CTAPHID is imported from canokey-qemu.h Reported-by: MkfsSion Signed-off-by: Hongren (Zenithal) Zheng Message-Id: Signed-off-by: Gerd Hoffmann --- hw/usb/canokey.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hw/usb/canokey.c b/hw/usb/canokey.c index 4a08b1cbd7..86548923eb 100644 --- a/hw/usb/canokey.c +++ b/hw/usb/canokey.c @@ -109,11 +109,10 @@ int canokey_emu_transmit( * Note: this is a quirk for CanoKey CTAPHID * because it calls multiple emu_transmit in one device_loop * but w/o data_in it would stuck in device_loop - * This has no side effect for CCID as it is strictly - * OUT then IN transfer - * However it has side effect for Control transfer + * This has side effect for CCID since CCID can send ZLP + * This also has side effect for Control transfer */ - if (ep_in != 0) { + if (ep_in == CANOKEY_EMU_EP_CTAPHID) { canokey_emu_data_in(ep_in); } return 0;