mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:47:35 +00:00
Kernel: Disable x86 RDTSC instruction in userspace
It's still possible to read the TSC via the read_tsc() syscall, but we will now clear some of the bottom bits for unprivileged users.
This commit is contained in:
parent
dfd759f75a
commit
38f93ef13b
6 changed files with 25 additions and 1 deletions
|
@ -526,6 +526,7 @@ bool g_cpu_supports_pae;
|
|||
bool g_cpu_supports_pge;
|
||||
bool g_cpu_supports_smep;
|
||||
bool g_cpu_supports_sse;
|
||||
bool g_cpu_supports_tsc;
|
||||
bool g_cpu_supports_umip;
|
||||
|
||||
void detect_cpu_features()
|
||||
|
@ -534,6 +535,7 @@ void detect_cpu_features()
|
|||
g_cpu_supports_pae = (processor_info.edx() & (1 << 6));
|
||||
g_cpu_supports_pge = (processor_info.edx() & (1 << 13));
|
||||
g_cpu_supports_sse = (processor_info.edx() & (1 << 25));
|
||||
g_cpu_supports_tsc = (processor_info.edx() & (1 << 4));
|
||||
|
||||
CPUID extended_processor_info(0x80000001);
|
||||
g_cpu_supports_nx = (extended_processor_info.edx() & (1 << 20));
|
||||
|
|
|
@ -513,4 +513,5 @@ extern bool g_cpu_supports_pae;
|
|||
extern bool g_cpu_supports_pge;
|
||||
extern bool g_cpu_supports_smep;
|
||||
extern bool g_cpu_supports_sse;
|
||||
extern bool g_cpu_supports_tsc;
|
||||
extern bool g_cpu_supports_umip;
|
||||
|
|
|
@ -2452,6 +2452,8 @@ int Process::sys$read_tsc(u32* lsw, u32* msw)
|
|||
if (!validate_write_typed(msw))
|
||||
return -EFAULT;
|
||||
read_tsc(*lsw, *msw);
|
||||
if (!is_superuser())
|
||||
*lsw &= ~0xfff;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -266,6 +266,14 @@ extern "C" [[noreturn]] void init(u32 physical_address_for_kernel_page_tables)
|
|||
kprintf("x86: UMIP support enabled\n");
|
||||
}
|
||||
|
||||
if (g_cpu_supports_tsc) {
|
||||
asm volatile(
|
||||
"mov %cr4, %eax\n"
|
||||
"orl $0x4, %eax\n"
|
||||
"mov %eax, %cr4\n");
|
||||
kprintf("x86: RDTSC support restricted\n");
|
||||
}
|
||||
|
||||
RTC::initialize();
|
||||
PIC::initialize();
|
||||
gdt_init();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue