Handle trashed queue pointers in vm_page_acquire_unlocked().
vm_page_acquire_unlocked() relies on type-stability of vm_page structures and assumes that the listq linkage pointers always point to a vm_page or are NULL. QUEUE_MACRO_DEBUG_TRASH breaks that assumption, so add an explicit check for a trashed queue pointer before dereferencing. Reported and tested by: pho Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D24472
This commit is contained in:
parent
3fd1ed6f36
commit
e367fe2912
@ -4438,7 +4438,7 @@ vm_page_acquire_unlocked(vm_object_t object, vm_pindex_t pindex,
|
|||||||
* without barriers. Switch to radix to verify.
|
* without barriers. Switch to radix to verify.
|
||||||
*/
|
*/
|
||||||
if (prev == NULL || (m = TAILQ_NEXT(prev, listq)) == NULL ||
|
if (prev == NULL || (m = TAILQ_NEXT(prev, listq)) == NULL ||
|
||||||
m->pindex != pindex ||
|
QMD_IS_TRASHED(m) || m->pindex != pindex ||
|
||||||
atomic_load_ptr(&m->object) != object) {
|
atomic_load_ptr(&m->object) != object) {
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user