|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Fwd: New Defects reported by Coverity Scan for XenProject
On 28.02.2024 13:19, Andrew Cooper wrote:
> Take 2, hopefully with Stewart's correct email address this time.
>
> ~Andrew
>
> On 28/02/2024 12:17 pm, Andrew Cooper wrote:
>> Not sure how well this is going to be formatted, but there's one new and
>> potentially interesting issue found by Coverity.
To be honest I didn't consider this interesting at all, but instead a false
positive due to limited insight that the tool has. But maybe I was wrong
and you see something I didn't see? vpci_process_pending() is vCPU-local
(run from the guest resume path), and hence there simply are no two threads
who want to look at the field. Storing NULL into it is merely a kind of
progress indicator, relevant to the given vCPU only.
Jan
>> ----8<----
>>
>> New defect(s) Reported-by: Coverity Scan
>> Showing 1 of 1 defect(s)
>>
>>
>> ** CID 1592633: (LOCK_EVASION)
>> /xen/drivers/vpci/header.c: 229 in vpci_process_pending()
>> /xen/drivers/vpci/header.c: 189 in vpci_process_pending()
>> /xen/drivers/vpci/header.c: 239 in vpci_process_pending()
>>
>>
>> ________________________________________________________________________________________________________
>> *** CID 1592633: (LOCK_EVASION)
>> /xen/drivers/vpci/header.c: 229 in vpci_process_pending()
>> 223 224 /* Clean all the rangesets */
>> 225 for ( i = 0; i < ARRAY_SIZE(header->bars); i++ )
>> 226 if ( !rangeset_is_empty(header->bars[i].mem) )
>> 227 rangeset_purge(header->bars[i].mem);
>> 228
>>>>> CID 1592633: (LOCK_EVASION)
>>>>> Thread1 sets "pdev" to a new value. Now the two threads have an
>>>>> inconsistent view of "pdev" and updates to fields of "pdev" or
>>>>> fields correlated with "pdev" may be lost.
>> 229 v->vpci.pdev = NULL;
>> 230 231 read_unlock(&v->domain->pci_lock);
>> 232 233 if ( !is_hardware_domain(v->domain) )
>> 234 domain_crash(v->domain);
>> /xen/drivers/vpci/header.c: 189 in vpci_process_pending()
>> 183 return false;
>> 184 185 read_lock(&v->domain->pci_lock);
>> 186 187 if ( !pdev->vpci || (v->domain != pdev->domain) )
>> 188 {
>>>>> CID 1592633: (LOCK_EVASION)
>>>>> Thread1 sets "pdev" to a new value. Now the two threads have an
>>>>> inconsistent view of "pdev" and updates to fields of "pdev" or
>>>>> fields correlated with "pdev" may be lost.
>> 189 v->vpci.pdev = NULL;
>> 190 read_unlock(&v->domain->pci_lock);
>> 191 return false;
>> 192 }
>> 193 194 header = &pdev->vpci->header;
>> /xen/drivers/vpci/header.c: 239 in vpci_process_pending()
>> 233 if ( !is_hardware_domain(v->domain) )
>> 234 domain_crash(v->domain);
>> 235 236 return false;
>> 237 }
>> 238 }
>>>>> CID 1592633: (LOCK_EVASION)
>>>>> Thread1 sets "pdev" to a new value. Now the two threads have an
>>>>> inconsistent view of "pdev" and updates to fields of "pdev" or
>>>>> fields correlated with "pdev" may be lost.
>> 239 v->vpci.pdev = NULL;
>> 240 241 spin_lock(&pdev->vpci->lock);
>> 242 modify_decoding(pdev, v->vpci.cmd, v->vpci.rom_only);
>> 243 spin_unlock(&pdev->vpci->lock);
>> 244
>>
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |