usb-redir: Always clear device state on filter reject

Always call usbredir_device_disconnect() when usbredir_check_filter() fails
to clean up all the device state (ie received endpoint info).

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Hans de Goede 2012-02-26 16:14:44 +01:00 committed by Gerd Hoffmann
parent 52234bc00d
commit 5b3bd68244
1 changed files with 7 additions and 4 deletions

View File

@ -958,7 +958,7 @@ static int usbredir_check_filter(USBRedirDevice *dev)
{ {
if (dev->interface_info.interface_count == 0) { if (dev->interface_info.interface_count == 0) {
ERROR("No interface info for device\n"); ERROR("No interface info for device\n");
return -1; goto error;
} }
if (dev->filter_rules) { if (dev->filter_rules) {
@ -966,7 +966,7 @@ static int usbredir_check_filter(USBRedirDevice *dev)
usb_redir_cap_connect_device_version)) { usb_redir_cap_connect_device_version)) {
ERROR("Device filter specified and peer does not have the " ERROR("Device filter specified and peer does not have the "
"connect_device_version capability\n"); "connect_device_version capability\n");
return -1; goto error;
} }
if (usbredirfilter_check( if (usbredirfilter_check(
@ -983,11 +983,15 @@ static int usbredir_check_filter(USBRedirDevice *dev)
dev->device_info.product_id, dev->device_info.product_id,
dev->device_info.device_version_bcd, dev->device_info.device_version_bcd,
0) != 0) { 0) != 0) {
return -1; goto error;
} }
} }
return 0; return 0;
error:
usbredir_device_disconnect(dev);
return -1;
} }
/* /*
@ -1113,7 +1117,6 @@ static void usbredir_interface_info(void *priv,
if (usbredir_check_filter(dev)) { if (usbredir_check_filter(dev)) {
ERROR("Device no longer matches filter after interface info " ERROR("Device no longer matches filter after interface info "
"change, disconnecting!\n"); "change, disconnecting!\n");
usbredir_device_disconnect(dev);
} }
} }
} }