[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