[PATCH v2 07/10] qemu_driver.c: validate 'driverName' earlier in qemuNodeDeviceDetachFlags()

Daniel Henrique Barboza danielhb413 at gmail.com
Thu Feb 18 12:05:06 UTC 2021



On 2/18/21 8:30 AM, John Ferlan wrote:
> 
> 
> On 2/2/21 8:06 PM, Daniel Henrique Barboza wrote:
>> The validation of 'driverName' does not depend on any other state and can be
>> done right on the start of the function. We can fail earlier while avoiding
>> a cleanup jump.
>>
>> Reviewed-by: Ján Tomko <jtomko at redhat.com>
>> Signed-off-by: Daniel Henrique Barboza <danielhb413 at gmail.com>
>> ---
>>   src/qemu/qemu_driver.c | 41 ++++++++++++++++++++---------------------
>>   1 file changed, 20 insertions(+), 21 deletions(-)
>>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>> index 64ae8fafc0..c6ba33e4ad 100644
>> --- a/src/qemu/qemu_driver.c
>> +++ b/src/qemu/qemu_driver.c
>> @@ -11982,6 +11982,25 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
>>   
>>       virCheckFlags(0, -1);
>>   
>> +    if (!driverName)
>> +        driverName = "vfio";
>> +
>> +    if (STREQ(driverName, "vfio") && !vfio) {
>> +        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
>> +                       _("VFIO device assignment is currently not "
>> +                         "supported on this system"));
>> +         return -1;
>> +    } else if (STREQ(driverName, "kvm")) {
>> +        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
>> +                       _("KVM device assignment is no longer "
>> +                         "supported on this system"));
>> +        return -1;
>> +    } else {
>> +        virReportError(VIR_ERR_INVALID_ARG,
>> +                       _("unknown driver name '%s'"), driverName);
>> +        return -1;
>> +    }
>> +
> 
> Coverity points out the rest of this is unreachable now (even with the
> subsequent patch).


oooffff. I'll fix it. Thanks for the heads up John!

> 
>>       if (!(nodeconn = virGetConnectNodeDev()))
>>           goto cleanup;
>>   
>> @@ -12013,27 +12032,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
>>       if (!pci)
>>           goto cleanup;
>>   
>> -    if (!driverName)
>> -        driverName = "vfio";
>> -
>> -    if (STREQ(driverName, "vfio")) {
>> -        if (!vfio) {
>> -            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
>> -                           _("VFIO device assignment is currently not "
>> -                             "supported on this system"));
>> -            goto cleanup;
>> -        }
>> -        virPCIDeviceSetStubDriver(pci, VIR_PCI_STUB_DRIVER_VFIO);
> 
> This section seems to be more than just code motion...  it used to pass
> thru here when vfio = true, but with the movement it would fall into the
> catch all else.
> 
> John
> 
>> -    } else if (STREQ(driverName, "kvm")) {
>> -        virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
>> -                       _("KVM device assignment is no longer "
>> -                         "supported on this system"));
>> -        goto cleanup;
>> -    } else {
>> -        virReportError(VIR_ERR_INVALID_ARG,
>> -                       _("unknown driver name '%s'"), driverName);
>> -        goto cleanup;
>> -    }
>> +    virPCIDeviceSetStubDriver(pci, VIR_PCI_STUB_DRIVER_VFIO);
>>   
>>       ret = virHostdevPCINodeDeviceDetach(hostdev_mgr, pci);
>>    cleanup:
>>
> 




More information about the libvir-list mailing list