mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-01 14:14:56 +00:00
powerpc_mmu_radix: Release PTP reference on leaf ptpage allocation failure
0013741
fixed an edge case invloving mlock() and superpage creation by creating and inserting a leaf pagetable page for mlock'd superpages. However, the code does not properly release the reference to the pagetable page in the error handling path. This commit fixes the issue by adding calls to 'pmap_abort_ptp' in the error handling path. Reported by: alc Approved by: markj (mentor) Fixes:0013741
Differential Revision: https://reviews.freebsd.org/D45582
This commit is contained in:
parent
200de4dc07
commit
858ead4bce
|
@ -3268,12 +3268,15 @@ pmap_enter_l3e(pmap_t pmap, vm_offset_t va, pml3_entry_t newpde, u_int flags,
|
|||
uwptpg = NULL;
|
||||
if ((newpde & PG_W) != 0 && pmap != kernel_pmap) {
|
||||
uwptpg = vm_page_alloc_noobj(VM_ALLOC_WIRED);
|
||||
if (uwptpg == NULL)
|
||||
if (uwptpg == NULL) {
|
||||
pmap_abort_ptp(pmap, va, pdpg);
|
||||
return (KERN_RESOURCE_SHORTAGE);
|
||||
}
|
||||
uwptpg->pindex = pmap_l3e_pindex(va);
|
||||
if (pmap_insert_pt_page(pmap, uwptpg)) {
|
||||
vm_page_unwire_noq(uwptpg);
|
||||
vm_page_free(uwptpg);
|
||||
pmap_abort_ptp(pmap, va, pdpg);
|
||||
return (KERN_RESOURCE_SHORTAGE);
|
||||
}
|
||||
pmap_resident_count_inc(pmap, 1);
|
||||
|
|
Loading…
Reference in a new issue