Commit bbeb34062fbad287c949a945a516a0c15b179993
Committed by
Avi Kivity
1 parent
6c3f604117
KVM: Fix a race condition for usage of is_hwpoison_address()
is_hwpoison_address accesses the page table, so the caller must hold current->mm->mmap_sem in read mode. So fix its usage in hva_to_pfn of kvm accordingly. Comment is_hwpoison_address to remind other users. Reported-by: Avi Kivity <avi@redhat.com> Signed-off-by: Huang Ying <ying.huang@intel.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Showing 2 changed files with 5 additions and 1 deletions Side-by-side Diff
mm/memory-failure.c
virt/kvm/kvm_main.c
... | ... | @@ -947,12 +947,13 @@ |
947 | 947 | if (unlikely(npages != 1)) { |
948 | 948 | struct vm_area_struct *vma; |
949 | 949 | |
950 | + down_read(¤t->mm->mmap_sem); | |
950 | 951 | if (is_hwpoison_address(addr)) { |
952 | + up_read(¤t->mm->mmap_sem); | |
951 | 953 | get_page(hwpoison_page); |
952 | 954 | return page_to_pfn(hwpoison_page); |
953 | 955 | } |
954 | 956 | |
955 | - down_read(¤t->mm->mmap_sem); | |
956 | 957 | vma = find_vma(current->mm, addr); |
957 | 958 | |
958 | 959 | if (vma == NULL || addr < vma->vm_start || |