In the Linux kernel, the following vulnerability has been resolved:
iommu/amd/iommuv2: Fix pasidstate refcount dec hit 0 warning on pasid unbind
When unbinding pasid - a race condition exists vs outstanding page faults.
To prevent this, the pasid_state object contains a refcount. * set to 1 on pasid bind * incremented on each ppr notification start * decremented on each ppr notification done * decremented on pasid unbind
Since refcountdec assumes that refcount will never reach 0: the current implementation causes the following to be invoked on pasid unbind: REFCOUNTWARN("decrement hit 0; leaking memory")
Fix this issue by changing refcountdec to refcountdecandtest to explicitly handle refcount=1.