On Tue Dec 10, 2024 at 9:39 AM CET, Claudio Imbrenda wrote: > In commit 77b533411595 ("KVM: s390: VSIE: sort out virtual/physical > address in pin_guest_page"), only pin_scb() has been updated. This > means that in unpin_scb() a virtual address was still used directly as > physical address without conversion. The resulting physical address is > obviously wrong and most of the time also invalid. > > Since commit d0ef8d9fbebe ("KVM: s390: Use kvm_release_page_dirty() to > unpin "struct page" memory"), unpin_guest_page() will directly use > kvm_release_page_dirty(), instead of kvm_release_pfn_dirty(), which has > since been removed. > > One of the checks that were performed by kvm_release_pfn_dirty() was to > verify whether the page was valid at all, and silently return > successfully without doing anything if the page was invalid. > > When kvm_release_pfn_dirty() was still used, the invalid page was thus > silently ignored. Now the check is gone and the result is an Oops. > This also means that when running with a V!=R kernel, the page was not > released, causing a leak. > > The solution is simply to add the missing virt_to_phys(). > > Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > Fixes: 77b533411595 ("KVM: s390: VSIE: sort out virtual/physical address in pin_guest_page") Reviewed-by: Nico Boehr <nrb@xxxxxxxxxxxxx>