* [Qemu-devel] [PULL 0/2] Usb 20180518 patches
@ 2018-05-18 7:50 Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 1/2] ccid-card-passthru: fix regression in realize() Gerd Hoffmann
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2018-05-18 7:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann
The following changes since commit a4207e3b00e89f934adb231057dcf9a75ac2ae45:
Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2018-05-17 11:59:50 +0100)
are available in the git repository at:
git://git.kraxel.org/qemu tags/usb-20180518-pull-request
for you to fetch changes up to 8030dca376fa1bc4d8a6be7628196578f8783ab3:
hw/usb/dev-smartcard-reader: Handle 64 B USB packets (2018-05-18 09:42:16 +0200)
----------------------------------------------------------------
usb: two smartcard reader fixes.
----------------------------------------------------------------
Jakub Jelen (1):
hw/usb/dev-smartcard-reader: Handle 64 B USB packets
Marc-André Lureau (1):
ccid-card-passthru: fix regression in realize()
hw/usb/ccid-card-passthru.c | 2 +-
hw/usb/dev-smartcard-reader.c | 14 +++++++++-----
2 files changed, 10 insertions(+), 6 deletions(-)
--
2.9.3
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PULL 1/2] ccid-card-passthru: fix regression in realize()
2018-05-18 7:50 [Qemu-devel] [PULL 0/2] Usb 20180518 patches Gerd Hoffmann
@ 2018-05-18 7:50 ` Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 2/2] hw/usb/dev-smartcard-reader: Handle 64 B USB packets Gerd Hoffmann
2018-05-18 13:11 ` [Qemu-devel] [PULL 0/2] Usb 20180518 patches Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2018-05-18 7:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Since cc847bfd16d894fd8c1a2ce25f31772f6cdbbc74, CCID card-passthru
fails to intialize, because it changed a debug line to an error,
probably by mistake. Change it back to a DPRINTF debug.
(solves Boxes creating VM with smartcard passthru failing to start)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-id: 20180515153039.27514-1-marcandre.lureau@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/ccid-card-passthru.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c
index 7684db0cb3..25fb19b0d7 100644
--- a/hw/usb/ccid-card-passthru.c
+++ b/hw/usb/ccid-card-passthru.c
@@ -345,7 +345,7 @@ static void passthru_realize(CCIDCardState *base, Error **errp)
card->vscard_in_pos = 0;
card->vscard_in_hdr = 0;
if (qemu_chr_fe_backend_connected(&card->cs)) {
- error_setg(errp, "ccid-card-passthru: initing chardev");
+ DPRINTF(card, D_INFO, "ccid-card-passthru: initing chardev");
qemu_chr_fe_set_handlers(&card->cs,
ccid_card_vscard_can_read,
ccid_card_vscard_read,
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Qemu-devel] [PULL 2/2] hw/usb/dev-smartcard-reader: Handle 64 B USB packets
2018-05-18 7:50 [Qemu-devel] [PULL 0/2] Usb 20180518 patches Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 1/2] ccid-card-passthru: fix regression in realize() Gerd Hoffmann
@ 2018-05-18 7:50 ` Gerd Hoffmann
2018-05-18 13:11 ` [Qemu-devel] [PULL 0/2] Usb 20180518 patches Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Gerd Hoffmann @ 2018-05-18 7:50 UTC (permalink / raw)
To: qemu-devel; +Cc: Gerd Hoffmann, Jakub Jelen
From: Jakub Jelen <jjelen@redhat.com>
The current code was not correctly handling 64 B (Max USB 1.1 payload size)
packets and therefore preventing some of the messages from smart card to
pass through to the guest.
If the smart card in host responded with 34 B of data in APDU layer, the
CCID headers added up to 64 B. The packet was send, but not correctly
committed per USB specification (8.5.3.2 Variable-length Data Stage):
> When all of the data structure is returned to the host, the function
> should indicate that the Data stage is ended by returning a packet
> that is shorter than the MaxPacketSize for the pipe. If the data
> structure is an exact multiple of wMaxPacketSize for the pipe, the
> function will return a zero-length packet to indicate the end of the
> Data stage.
This lead the guest applications to timeout while waiting for the rest
of data (the emulation layer is answering with NAK until the timeout).
This patch is checking the current maximum packet size and if the
payload of this size is detected, the message buffer is not yet released.
With the next call, the empty buffer is sent and the message buffer
is finally released.
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Message-id: 20180516115544.3897-2-jjelen@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/usb/dev-smartcard-reader.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/hw/usb/dev-smartcard-reader.c b/hw/usb/dev-smartcard-reader.c
index cabb564788..f7451923f4 100644
--- a/hw/usb/dev-smartcard-reader.c
+++ b/hw/usb/dev-smartcard-reader.c
@@ -1064,7 +1064,8 @@ err:
return;
}
-static void ccid_bulk_in_copy_to_guest(USBCCIDState *s, USBPacket *p)
+static void ccid_bulk_in_copy_to_guest(USBCCIDState *s, USBPacket *p,
+ unsigned int max_packet_size)
{
int len = 0;
@@ -1072,10 +1073,13 @@ static void ccid_bulk_in_copy_to_guest(USBCCIDState *s, USBPacket *p)
if (s->current_bulk_in != NULL) {
len = MIN(s->current_bulk_in->len - s->current_bulk_in->pos,
p->iov.size);
- usb_packet_copy(p, s->current_bulk_in->data +
- s->current_bulk_in->pos, len);
+ if (len) {
+ usb_packet_copy(p, s->current_bulk_in->data +
+ s->current_bulk_in->pos, len);
+ }
s->current_bulk_in->pos += len;
- if (s->current_bulk_in->pos == s->current_bulk_in->len) {
+ if (s->current_bulk_in->pos == s->current_bulk_in->len
+ && len != max_packet_size) {
ccid_bulk_in_release(s);
}
} else {
@@ -1107,7 +1111,7 @@ static void ccid_handle_data(USBDevice *dev, USBPacket *p)
case USB_TOKEN_IN:
switch (p->ep->nr) {
case CCID_BULK_IN_EP:
- ccid_bulk_in_copy_to_guest(s, p);
+ ccid_bulk_in_copy_to_guest(s, p, dev->ep_ctl.max_packet_size);
break;
case CCID_INT_IN_EP:
if (s->notify_slot_change) {
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PULL 0/2] Usb 20180518 patches
2018-05-18 7:50 [Qemu-devel] [PULL 0/2] Usb 20180518 patches Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 1/2] ccid-card-passthru: fix regression in realize() Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 2/2] hw/usb/dev-smartcard-reader: Handle 64 B USB packets Gerd Hoffmann
@ 2018-05-18 13:11 ` Peter Maydell
2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2018-05-18 13:11 UTC (permalink / raw)
To: Gerd Hoffmann; +Cc: QEMU Developers
On 18 May 2018 at 08:50, Gerd Hoffmann <kraxel@redhat.com> wrote:
> The following changes since commit a4207e3b00e89f934adb231057dcf9a75ac2ae45:
>
> Merge remote-tracking branch 'remotes/cody/tags/block-pull-request' into staging (2018-05-17 11:59:50 +0100)
>
> are available in the git repository at:
>
> git://git.kraxel.org/qemu tags/usb-20180518-pull-request
>
> for you to fetch changes up to 8030dca376fa1bc4d8a6be7628196578f8783ab3:
>
> hw/usb/dev-smartcard-reader: Handle 64 B USB packets (2018-05-18 09:42:16 +0200)
>
> ----------------------------------------------------------------
> usb: two smartcard reader fixes.
>
> ----------------------------------------------------------------
>
> Jakub Jelen (1):
> hw/usb/dev-smartcard-reader: Handle 64 B USB packets
>
> Marc-André Lureau (1):
> ccid-card-passthru: fix regression in realize()
>
> hw/usb/ccid-card-passthru.c | 2 +-
> hw/usb/dev-smartcard-reader.c | 14 +++++++++-----
> 2 files changed, 10 insertions(+), 6 deletions(-)
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-05-18 13:11 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-18 7:50 [Qemu-devel] [PULL 0/2] Usb 20180518 patches Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 1/2] ccid-card-passthru: fix regression in realize() Gerd Hoffmann
2018-05-18 7:50 ` [Qemu-devel] [PULL 2/2] hw/usb/dev-smartcard-reader: Handle 64 B USB packets Gerd Hoffmann
2018-05-18 13:11 ` [Qemu-devel] [PULL 0/2] Usb 20180518 patches Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).