[libvirt] [PATCH v2 1/4] conf: move seclabel for chardev source to the correct sturcture

John Ferlan jferlan at redhat.com
Thu Jun 15 10:50:34 UTC 2017



On 06/15/2017 02:39 AM, Pavel Hrdina wrote:
> On Tue, Jun 13, 2017 at 12:35:10PM -0400, John Ferlan wrote:
>>
>>
>> On 05/29/2017 10:31 AM, Pavel Hrdina wrote:
>>> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
>>> ---
>>>
>>> Notes:
>>>     new in v2
>>>
>>>  src/conf/domain_conf.c          | 46 +++++++++++++++++++----------------------
>>>  src/conf/domain_conf.h          |  9 ++++----
>>>  src/security/security_dac.c     | 26 ++++++++++-------------
>>>  src/security/security_manager.c |  4 ++--
>>>  src/security/security_selinux.c | 24 +++++++++------------
>>>  5 files changed, 49 insertions(+), 60 deletions(-)
>>>
>>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>>> index c7e20b8ba1..68dc2832cb 100644
>>> --- a/src/conf/domain_conf.c
>>> +++ b/src/conf/domain_conf.c
>>> @@ -2076,12 +2076,21 @@ virDomainChrSourceDefCopy(virDomainChrSourceDefPtr dest,
>>>  
>>>  void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def)
>>>  {
>>> +    size_t i;
>>> +
>>>      if (!def)
>>>          return;
>>>  
>>>      virDomainChrSourceDefClear(def);
>>>      virObjectUnref(def->privateData);
>>>  
>>> +    if (def->seclabels) {
>>> +        for (i = 0; i < def->nseclabels; i++)
>>> +            virSecurityDeviceLabelDefFree(def->seclabels[i]);
>>> +        VIR_FREE(def->seclabels);
>>> +    }
>>> +
>>> +
>>>      VIR_FREE(def);
>>>  }
>>>  
>>> @@ -2150,8 +2159,6 @@ virDomainChrSourceDefIsEqual(const virDomainChrSourceDef *src,
>>>  
>>>  void virDomainChrDefFree(virDomainChrDefPtr def)
>>>  {
>>> -    size_t i;
>>> -
>>>      if (!def)
>>>          return;
>>>  
>>> @@ -2176,12 +2183,6 @@ void virDomainChrDefFree(virDomainChrDefPtr def)
>>>      virDomainChrSourceDefFree(def->source);
>>>      virDomainDeviceInfoClear(&def->info);
>>>  
>>> -    if (def->seclabels) {
>>> -        for (i = 0; i < def->nseclabels; i++)
>>> -            virSecurityDeviceLabelDefFree(def->seclabels[i]);
>>> -        VIR_FREE(def->seclabels);
>>> -    }
>>> -
>>>      VIR_FREE(def);
>>>  }
>>>  
>>> @@ -10688,8 +10689,8 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,
>>>                  if (chr_def) {
>>
>> Is the @chr_def check necessary still?  I assume it's there because
>> chr_def can be passed as NULL in some cases.
>>
>> Looks like all this was added as part of commit 'f8b08d0e'
>>
>> The chr_def would be NULL for Smartcard, RNG, and Redirdev callers which
>> each now doesn't pass a NULL to virDomainChrSourceDefFormat, so that
>> leads me to believe that the @chr_def should be removed.
> 
> But this hunk is from virDomainChrSourceDefParseXML() function.
> 

Yes, I knew that when I wrote the comment, but that wasn't the point.

Since you've moved the labels into @def instead and similarly altered
calls to virDomainChrSourceDefFormat such that they don't receive
chr_def (in the very next hunk of changes BTW), then I would think at
this point removing chr_def would be safe, but I suppose I could be
wrong. Hence why I asked.

So does it hurt to keep it, probably not; however, IIUC the reason why
it was there was because if it wasn't, then dereferencing chr_def to get
the [n]seclabels in the subsequent call wouldn't end well.

John

>> The rest looks good, so
>>
>> Reviewed-by: John Ferlan <jferlan at redhat.com>
> 
> Thanks
> 
> Pavel
> 




More information about the libvir-list mailing list