From fa57c51ac74a8301db7ab8b2fc9cbd63d69d26b3 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Wed, 31 Aug 2011 02:10:05 +0200 Subject: Disable global page while writing in kernel space * i386/i386/db_interface.c (db_write_bytes): If CPU has PGE feature, disable CR4_PGE before enabling kernel page write access, and re-enable the former after disabling the latter. --- i386/i386/db_interface.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/i386/i386/db_interface.c b/i386/i386/db_interface.c index d149adc5..c07884de 100644 --- a/i386/i386/db_interface.c +++ b/i386/i386/db_interface.c @@ -39,6 +39,7 @@ #include #include #include +#include #include "gdt.h" #include "trap.h" @@ -390,6 +391,8 @@ db_write_bytes( oldmap1 = *ptep1; *ptep1 |= INTEL_PTE_WRITE; } + if (CPU_HAS_FEATURE(CPU_FEATURE_PGE)) + set_cr4(get_cr4() & ~CR4_PGE); flush_tlb(); } @@ -404,6 +407,8 @@ db_write_bytes( *ptep1 = oldmap1; } flush_tlb(); + if (CPU_HAS_FEATURE(CPU_FEATURE_PGE)) + set_cr4(get_cr4() | CR4_PGE); } } -- cgit v1.2.3