summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/HALKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-06-22 12:14:01 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-06-22 12:14:01 +0200
commitb1658f93dc1157e7883d381b0316a60e760fe557 (patch)
tree7b2d59c732ccef35872e531d6a4e0e0a2bf18ef4 /dev/kernel/HALKit
parentf153886c81c7d11b8e249fa769265646216d5584 (diff)
fix: HAL: syscall interrupt must be ring-3 only.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/HALKit')
-rw-r--r--dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/Processor.h1
2 files changed, 2 insertions, 1 deletions
diff --git a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
index f9749946..dc680ce8 100644
--- a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
+++ b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
@@ -32,7 +32,7 @@ Void IDTLoader::Load(Register64& idt) {
for (SizeT idt_indx = 0; idt_indx < kKernelIdtSize; ++idt_indx) {
Detail::kInterruptVectorTable[idt_indx].Selector = kIDTSelector;
Detail::kInterruptVectorTable[idt_indx].Ist = 0;
- Detail::kInterruptVectorTable[idt_indx].TypeAttributes = kInterruptGate;
+ Detail::kInterruptVectorTable[idt_indx].TypeAttributes = kKernelInterruptId ? kUserInterruptGate : kInterruptGate;
Detail::kInterruptVectorTable[idt_indx].OffsetLow = ((UIntPtr) ptr_ivt[idt_indx] & 0xFFFF);
Detail::kInterruptVectorTable[idt_indx].OffsetMid =
(((UIntPtr) ptr_ivt[idt_indx] >> 16) & 0xFFFF);
diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h
index b6465941..99f857b1 100644
--- a/dev/kernel/HALKit/AMD64/Processor.h
+++ b/dev/kernel/HALKit/AMD64/Processor.h
@@ -47,6 +47,7 @@
#define IsLevelTriggered(FLG) (FLG & 8)
#define kInterruptGate (0x8E)
+#define kUserInterruptGate (0xEE)
#define kTrapGate (0xEF)
#define kTaskGate (0b10001100)
#define kIDTSelector (0x08)