page_fault_process_memory_range(): fix double allocation leak

This commit is contained in:
Balazs Gerofi
2016-09-23 08:41:05 -04:00
parent 5db6c311f4
commit cc3f6e1a4f

View File

@ -1517,7 +1517,7 @@ static int page_fault_process_memory_range(struct process_vm *vm, struct vm_rang
} }
} }
if (phys == NOPHYS) { if (phys == NOPHYS) {
void *virt; void *virt = NULL;
size_t npages; size_t npages;
retry: retry:
@ -1556,10 +1556,12 @@ retry:
attr = arch_vrflag_to_ptattr(range->flag | memobj_flag, reason, ptep); attr = arch_vrflag_to_ptattr(range->flag | memobj_flag, reason, ptep);
/*****/ /*****/
if (((range->flag & VR_PRIVATE) if (((range->flag & VR_PRIVATE) ||
|| ((reason & PF_PATCH) ((reason & PF_PATCH) && !(range->flag & VR_PROT_WRITE)))
&& !(range->flag & VR_PROT_WRITE))) && ((!page && phys == NOPHYS) || (page &&
&& (!page || page_is_in_memobj(page) || page_is_multi_mapped(page))) { (page_is_in_memobj(page) ||
page_is_multi_mapped(page))))) {
if (!(attr & PTATTR_DIRTY)) { if (!(attr & PTATTR_DIRTY)) {
attr &= ~PTATTR_WRITABLE; attr &= ~PTATTR_WRITABLE;
} }