diff --git a/vm.c b/vm.c index d4982ee..c8b8d35 100644 --- a/vm.c +++ b/vm.c @@ -168,7 +168,9 @@ switchuvm(struct proc *p) cpu->gdt[SEG_TSS].s = 0; cpu->ts.ss0 = SEG_KDATA << 3; cpu->ts.esp0 = (uint)proc->kstack + KSTACKSIZE; - cpu->ts.iomb = (ushort) 0xFFFF; // forbid I/O instructions from user space + // setting IOPL=0 in eflags *and* iomb beyond the tss segment limit + // forbids I/O instructions (e.g., inb and outb) from user space + cpu->ts.iomb = (ushort) 0xFFFF; ltr(SEG_TSS << 3); if(p->pgdir == 0) panic("switchuvm: no pgdir");