]> git.proxmox.com Git - mirror_qemu.git/commitdiff
hw/usb/canokey: Fix CCID ZLP
authorHongren (Zenithal) Zheng <i@zenithal.me>
Mon, 13 Jun 2022 12:14:19 +0000 (20:14 +0800)
committerGerd Hoffmann <kraxel@redhat.com>
Fri, 1 Jul 2022 10:37:36 +0000 (12:37 +0200)
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 <myychina28759@gmail.com>
Signed-off-by: Hongren (Zenithal) Zheng <i@zenithal.me>
Message-Id: <YqcqGz0s3+LE42ms@Sun>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/canokey.c

index 4a08b1cbd776a1c25a4072c921f4c61590d2a5a1..86548923eb1621ea3c23adb9eee5b68526c7f063 100644 (file)
@@ -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;