Re: [libvirt PATCH] network: do not assume dnsmasq in networkUpdateState

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/22/23 11:07, Michal Prívozník wrote:
> On 3/17/23 15:59, Peter Krempa wrote:
>> On Thu, Mar 16, 2023 at 14:21:27 +0100, Ján Tomko wrote:
>>> If we don't have dnsmasq, it's pointless to try to find
>>> its pidfile.
>>>
>>> Also, dnsmasqCapsGetBinaryPath would access a NULL pointer.
>>>
>>> Fixes: 4b68c982e283471575bacbf87302495864da46fe
>>> Foxes: https://gitlab.com/libvirt/libvirt/-/issues/456
>>
>> Awww ^_^
>>
>>> Signed-off-by: Ján Tomko <jtomko@xxxxxxxxxx>
>>> ---
>>>  src/network/bridge_driver.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
>>> index 3fa56bfc09..ee4bbd4a93 100644
>>> --- a/src/network/bridge_driver.c
>>> +++ b/src/network/bridge_driver.c
>>> @@ -492,7 +492,7 @@ networkUpdateState(virNetworkObj *obj,
>>>      virNetworkObjPortForEach(obj, networkUpdatePort, obj);
>>>  
>>>      /* Try and read dnsmasq pids of active networks */
>>> -    if (virNetworkObjIsActive(obj) && def->ips && (def->nips > 0)) {
>>> +    if (dnsmasq_caps && virNetworkObjIsActive(obj) && def->ips && (def->nips > 0)) {
>>>          pid_t dnsmasqPid;
>>
>> Based on the fact that at the beginning of this function we check:
>>
>>  if (!virNetworkObjIsActive(obj))
>>      return 0;
>>
>> If we get to this place and don't have the capabilities this must mean
>> that the 'dnsmasq' binary was removed during runtime, right?
>>
>> In such case we should still be able to read the pidfile though as the
>> process is supposed to be around.
>>
> 
> Yeah, for this particular bug we may need to go with:
> 
> diff --git i/src/network/bridge_driver.c w/src/network/bridge_driver.c
> index 3fa56bfc09..a11a53501f 100644
> --- i/src/network/bridge_driver.c
> +++ w/src/network/bridge_driver.c
> @@ -493,15 +493,19 @@ networkUpdateState(virNetworkObj *obj,
>  
>      /* Try and read dnsmasq pids of active networks */
>      if (virNetworkObjIsActive(obj) && def->ips && (def->nips > 0)) {
> +        const char *binpath = NULL;
>          pid_t dnsmasqPid;
>  
>          if (networkSetMacMap(cfg, obj) < 0)
>              return -1;
>  
> +        if (dnsmasq_caps)
> +            binpath = dnsmasqCapsGetBinaryPath(dnsmasq_caps);
> +
>          ignore_value(virPidFileReadIfAlive(cfg->pidDir,
>                                             def->name,
>                                             &dnsmasqPid,
> -                                           dnsmasqCapsGetBinaryPath(dnsmasq_caps)));
> +                                           binpath));
>          virNetworkObjSetDnsmasqPid(obj, dnsmasqPid);
>      }
> 
> 

Jano, you do want to resubmit the patch?

Michal




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux