[libvirt PATCH] network: do not assume dnsmasq in networkUpdateState
Ján Tomko
jtomko at redhat.com
Thu Apr 13 15:22:40 UTC 2023
On a Thursday in 2023, Michal Prívozník wrote:
>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 at redhat.com>
>>>> ---
>>>> 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?
>
I do not.
Going with your proposed changes, we'd lose the pid reuse protection and
I do not have the energy to rewrite how we deal with dnsmasq pidfiles.
Jano
>Michal
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20230413/a2c78749/attachment.sig>
More information about the libvir-list
mailing list