From 443be800b799c6a22d69b4bf80e2415d5694174e Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 6 May 2026 15:02:38 +0300 Subject: [PATCH] Kernel: Fix remote TLB shootdown for <= 32 pages I was modifying the `vaddr` argument while invalidating which lead to the smp message containing wrong virtual address. This showed up in really weird bugs from invalid TLB --- kernel/arch/i686/PageTable.cpp | 4 ++-- kernel/arch/x86_64/PageTable.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/arch/i686/PageTable.cpp b/kernel/arch/i686/PageTable.cpp index 8f8159f6..60ceb108 100644 --- a/kernel/arch/i686/PageTable.cpp +++ b/kernel/arch/i686/PageTable.cpp @@ -343,8 +343,8 @@ namespace Kernel ; else if (pages <= 32 || !s_is_initialized) { - for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE) - asm volatile("invlpg (%0)" :: "r"(vaddr)); + for (size_t i = 0; i < pages; i++) + asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE)); } else if (is_userspace || !s_has_pge) { diff --git a/kernel/arch/x86_64/PageTable.cpp b/kernel/arch/x86_64/PageTable.cpp index 3a526909..2fbfe4c0 100644 --- a/kernel/arch/x86_64/PageTable.cpp +++ b/kernel/arch/x86_64/PageTable.cpp @@ -472,8 +472,8 @@ namespace Kernel ; else if (pages <= 32 || !s_is_initialized) { - for (size_t i = 0; i < pages; i++, vaddr += PAGE_SIZE) - asm volatile("invlpg (%0)" :: "r"(vaddr)); + for (size_t i = 0; i < pages; i++) + asm volatile("invlpg (%0)" :: "r"(vaddr + i * PAGE_SIZE)); } else if (is_userspace || !s_has_pge) {