From a48edb99be335cab5703952a588352cbcc9953c1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Wed, 1 Apr 2026 16:46:20 -0300 Subject: [PATCH] vmmcache: fix TOCTOU --- kernel-src/mm/vmmcache.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel-src/mm/vmmcache.c b/kernel-src/mm/vmmcache.c index 4aff7b66..e7a3494c 100644 --- a/kernel-src/mm/vmmcache.c +++ b/kernel-src/mm/vmmcache.c @@ -369,10 +369,15 @@ int vmmcache_syncvnode(vnode_t *vnode, uintmax_t offset, size_t size) { vnodedirtylist = vnodedirtylist->writenext; page->writenext = NULL; - int error = syncpage(page, false); + // another thread could already have synced this page, verify if it is still dirty + if (page->flags & PAGE_FLAGS_DIRTY) { + int error = syncpage(page, false); - if (e == 0) - e = error; + if (e == 0) + e = error; + } else { + RELEASE_LOCK(); + } // syncpage returns with lock released }