page_fault_process_memory_range(): fix double allocation leak
This commit is contained in:
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user