In the Linux kernel, the following vulnerability has been resolved:
vfio/type1: Unpin zero pages
There's currently a reference count leak on the zero page. We increment the reference via pinuserpagesremote(), but the page is later handled as an invalid/reserved page, therefore it's not accounted against the user and not unpinned by our putpfn().
Introducing special zero page handling in put_pfn() would resolve the leak, but without accounting of the zero page, a single user could still create enough mappings to generate a reference count overflow.
The zero page is always resident, so for our purposes there's no reason to keep it pinned. Therefore, add a loop to walk pages returned from pinuserpages_remote() and unpin any zero pages.