[PATCH 6/8] util: Check for errors in virLogSetFromEnv

Erik Skultety eskultet at redhat.com
Wed Jan 5 11:29:18 UTC 2022


On Tue, Jan 04, 2022 at 02:47:10PM +0100, Martin Kletzander wrote:
> And make callers check the return value as well.  This helps error out early for
> invalid environment variables.
> 
> That is desirable because it could lead to deadlocks.  This can happen when
> resetting logging after fork() reports translated errors because gettext
> functions are not reentrant.  Well, it is not limited to resetting logging after
> fork(), it can be any translation at that phase, but parsing environment
> variables is easy to make fail on purpose to show the result, it can also happen
> just due to a typo.


> Logging settings are also something that we want to report
> errors on for example when it is being done over admin API.

True in general, but slightly off-topic wrt to the patch itself as
virLogSetFromEnv is irrelevant to admin API usage.

...

> -void
> +int
>  virLogSetFromEnv(void)
>  {
>      const char *debugEnv;
>  
>      if (virLogInitialize() < 0)
> -        return;
> +        return -1;
>  
>      debugEnv = getenv("LIBVIRT_DEBUG");
> -    if (debugEnv && *debugEnv)
> -        virLogSetDefaultPriority(virLogParseDefaultPriority(debugEnv));
> +    if (debugEnv && *debugEnv) {
> +        int priority = virLogParseDefaultPriority(debugEnv);
> +        if (priority < 0 ||
> +            virLogSetDefaultPriority(priority) < 0)
> +        return -1;

           ^^^ indentation

> +    }
>      debugEnv = getenv("LIBVIRT_LOG_FILTERS");
> -    if (debugEnv && *debugEnv)
> -        virLogSetFilters(debugEnv);
> +    if (debugEnv && *debugEnv &&
> +        virLogSetFilters(debugEnv))
> +        return -1;
>      debugEnv = getenv("LIBVIRT_LOG_OUTPUTS");
> -    if (debugEnv && *debugEnv)
> -        virLogSetOutputs(debugEnv);
> +    if (debugEnv && *debugEnv &&
> +        virLogSetOutputs(debugEnv))
> +        return -1;
> +
> +    return 0;
>  }

Reviewed-by: Erik Skultety <eskultet at redhat.com>




More information about the libvir-list mailing list