amd64 pmap: fix NULL deref in pmap_mincore().

pmap_pdpe() might return NULL, check for it.

Reviewed by:	markj
Reported and tested by:	pho
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D27956
This commit is contained in:
Konstantin Belousov 2021-01-05 17:36:37 +02:00
parent 425f68e6ce
commit 9658d9c71a

View File

@ -9490,6 +9490,8 @@ pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap)
pa = 0;
val = 0;
pdpe = pmap_pdpe(pmap, addr);
if (pdpe == NULL)
goto out;
if ((*pdpe & PG_V) != 0) {
if ((*pdpe & PG_PS) != 0) {
pte = *pdpe;
@ -9525,6 +9527,7 @@ pmap_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap)
(pte & (PG_MANAGED | PG_V)) == (PG_MANAGED | PG_V)) {
*pap = pa;
}
out:
PMAP_UNLOCK(pmap);
return (val);
}