瀏覽代碼

Kernel: Set NX bit on expanded kmalloc memory mappings if supported

We never want to execute kmalloc memory.
Andreas Kling 3 年之前
父節點
當前提交
4d585cdb82
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      Kernel/Heap/kmalloc.cpp

+ 4 - 0
Kernel/Heap/kmalloc.cpp

@@ -127,6 +127,8 @@ struct KmallocGlobalData {
 
         expansion_data->next_virtual_address = expansion_data->next_virtual_address.offset(new_subheap_size);
 
+        auto cpu_supports_nx = Processor::current().has_feature(CPUFeature::NX);
+
         SpinlockLocker mm_locker(Memory::s_mm_lock);
         SpinlockLocker pd_locker(MM.kernel_page_directory().get_lock());
 
@@ -146,6 +148,8 @@ struct KmallocGlobalData {
             pte->set_global(true);
             pte->set_user_allowed(false);
             pte->set_writable(true);
+            if (cpu_supports_nx)
+                pte->set_execute_disabled(true);
             pte->set_present(true);
         }