usb: redirect bugfix, MAINTAINERS update.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJW1CcCAAoJEEy22O7T6HE47tQQAIbvlJvX2x208k9BeKejRItz QFwyqTR/HM8ISCUvUijDwlD2ZQWKQkg+gOcUElHHZF5IfmH6fVI7Gl3/PSiHAJTv jISVwocVk7byTzdxpRWIeDshQ/6WwaSH9vNaI90jTjfkq0zleKwqWJIUxyG198X1 D4OZhBYVu5V3pZwpkY0faXAIlbGnNd+D0klMdUfJFv8RZr00Axb9Q8oRm5ftSFSF Z2/muIGfltkqg5KZX+tOKVUEV+WK3XfxVCVfK8Oq5yPaK6HA2P8eiqynTQ9j7I2r ATbr4YFLdbj0lgJEu7ypI1CkUACTTJ2k1rpe0lHmLXezyVqlutSV0wU16/kekrvn uuPXoyB1n5KqSh2zXmeQHNV3kgFzqhuqmbJI6HeUCcrlHkXBJe/4tdeuomB2tqqh 7Q1igD10o5E/kTFiTWheowLrdOQsDzPCDlQveqJHfzZpJktDG5r1E3DqTKkFnTlv gMwcLPWIb1TvtBVbtnYZGavGgGmjuLLhSebl7cM2xKbOkdVo/7ZkyeCgPBiVMp+U rT+GZI8hIuZIlcjejw7iJ05kuj1y9BMbFpNEKrNYPCvmBmonkxvoKnK+cQamvN+R yAEdtSZV3mFhNMjC9k1EnBza4aH/5tZ4zNQ1dFLPJ8r/Bl/NOE4Tsesm0Tley3TK cSds5BddGaieJXUJisV3 =c06t -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/pull-usb-20160229-1' into staging usb: redirect bugfix, MAINTAINERS update. # gpg: Signature made Mon 29 Feb 2016 11:09:54 GMT using RSA key ID D3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" * remotes/kraxel/tags/pull-usb-20160229-1: usb-redirect: Avoid double free of data MAINTAINERS: Add some missing entries for USB related files Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
071608b519
@ -857,6 +857,10 @@ M: Gerd Hoffmann <kraxel@redhat.com>
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
F: hw/usb/*
|
F: hw/usb/*
|
||||||
F: tests/usb-*-test.c
|
F: tests/usb-*-test.c
|
||||||
|
F: docs/usb2.txt
|
||||||
|
F: docs/usb-storage.txt
|
||||||
|
F: include/hw/usb.h
|
||||||
|
F: include/hw/usb/
|
||||||
|
|
||||||
USB (serial adapter)
|
USB (serial adapter)
|
||||||
M: Gerd Hoffmann <kraxel@redhat.com>
|
M: Gerd Hoffmann <kraxel@redhat.com>
|
||||||
|
@ -447,7 +447,7 @@ static USBPacket *usbredir_find_packet_by_id(USBRedirDevice *dev,
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len,
|
static int bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len,
|
||||||
uint8_t status, uint8_t ep, void *free_on_destroy)
|
uint8_t status, uint8_t ep, void *free_on_destroy)
|
||||||
{
|
{
|
||||||
struct buf_packet *bufp;
|
struct buf_packet *bufp;
|
||||||
@ -464,7 +464,7 @@ static void bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len,
|
|||||||
if (dev->endpoint[EP2I(ep)].bufpq_size >
|
if (dev->endpoint[EP2I(ep)].bufpq_size >
|
||||||
dev->endpoint[EP2I(ep)].bufpq_target_size) {
|
dev->endpoint[EP2I(ep)].bufpq_target_size) {
|
||||||
free(data);
|
free(data);
|
||||||
return;
|
return -1;
|
||||||
}
|
}
|
||||||
dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0;
|
dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0;
|
||||||
}
|
}
|
||||||
@ -477,6 +477,7 @@ static void bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len,
|
|||||||
bufp->free_on_destroy = free_on_destroy;
|
bufp->free_on_destroy = free_on_destroy;
|
||||||
QTAILQ_INSERT_TAIL(&dev->endpoint[EP2I(ep)].bufpq, bufp, next);
|
QTAILQ_INSERT_TAIL(&dev->endpoint[EP2I(ep)].bufpq, bufp, next);
|
||||||
dev->endpoint[EP2I(ep)].bufpq_size++;
|
dev->endpoint[EP2I(ep)].bufpq_size++;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bufp_free(USBRedirDevice *dev, struct buf_packet *bufp,
|
static void bufp_free(USBRedirDevice *dev, struct buf_packet *bufp,
|
||||||
@ -2082,13 +2083,17 @@ static void usbredir_buffered_bulk_packet(void *priv, uint64_t id,
|
|||||||
status = usb_redir_success;
|
status = usb_redir_success;
|
||||||
free_on_destroy = NULL;
|
free_on_destroy = NULL;
|
||||||
for (i = 0; i < data_len; i += len) {
|
for (i = 0; i < data_len; i += len) {
|
||||||
|
int r;
|
||||||
if (len >= (data_len - i)) {
|
if (len >= (data_len - i)) {
|
||||||
len = data_len - i;
|
len = data_len - i;
|
||||||
status = buffered_bulk_packet->status;
|
status = buffered_bulk_packet->status;
|
||||||
free_on_destroy = data;
|
free_on_destroy = data;
|
||||||
}
|
}
|
||||||
/* bufp_alloc also adds the packet to the ep queue */
|
/* bufp_alloc also adds the packet to the ep queue */
|
||||||
bufp_alloc(dev, data + i, len, status, ep, free_on_destroy);
|
r = bufp_alloc(dev, data + i, len, status, ep, free_on_destroy);
|
||||||
|
if (r) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->endpoint[EP2I(ep)].pending_async_packet) {
|
if (dev->endpoint[EP2I(ep)].pending_async_packet) {
|
||||||
|
Loading…
Reference in New Issue
Block a user