[Spice-devel] [PATCH] usbredirparser: prevent endless recursion if interface_count == 0
Christophe Fergeau
cfergeau at redhat.com
Tue Jul 26 16:00:42 UTC 2016
Hey Alon,
On Tue, Jul 26, 2016 at 01:47:16PM +0300, Alon Levy wrote:
> On fedora 24 this function is tail optimized, resulting in a busy wait.
>
> This happens to me with virt-manager running a win7 vm
Ah ok, probably goes with the call with interface_count == 0 in
usbredirhost.c if libusb_get_active_config_descriptor() returns NULL. In
this case, if usbredirfilter_check1() does not match the device, then
we'll indeed keep calling usbredirfilter_check() as num_skipped will
always be 0 when interface_count is 0. The tail optimization of the call
means that instead of crashing because of the infinite recursion, we
just busy wait.
Patch looks good to me, though a bit more details in the commit log
would have avoided some head scratching :p
Christophe
>
> usbredir-0.7.1-2.fc24.x86_64
> ---
> Hi Guys!
>
> One liner to fix an issue I had with virt-manager - symptom is 100% cpu
> taken in it, stack traced to the problem fixed by this patch.
>
> Alon
>
> usbredirparser/usbredirfilter.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/usbredirparser/usbredirfilter.c
> b/usbredirparser/usbredirfilter.c
> index 02184ef..bdfbfc2 100644
> --- a/usbredirparser/usbredirfilter.c
> +++ b/usbredirparser/usbredirfilter.c
> @@ -205,7 +205,7 @@ int usbredirfilter_check(
> * by recursively calling this function with a flag that forbids
> * skipping (usbredirfilter_fl_dont_skip_non_boot_hid)
> */
> - if (num_skipped == interface_count) {
> + if (interface_count > 0 && num_skipped == interface_count) {
> rc = usbredirfilter_check(rules, rules_count,
> device_class, device_subclass,
> device_protocol,
> interface_class, interface_subclass,
> --
> 2.7.4
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160726/064eca7a/attachment.sig>
More information about the Spice-devel
mailing list