Loading arch/x86/include/asm/syscalls.h +1 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ /* Common in X86_32 and X86_64 */ /* kernel/ioport.c */ asmlinkage long sys_ioperm(unsigned long, unsigned long, int); long sys_iopl(unsigned int, struct pt_regs *); /* kernel/process.c */ int sys_fork(struct pt_regs *); Loading @@ -35,8 +36,6 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *); /* X86_32 only */ #ifdef CONFIG_X86_32 /* kernel/ioport.c */ long sys_iopl(struct pt_regs *); /* kernel/process_32.c */ int sys_clone(struct pt_regs *); Loading Loading @@ -70,9 +69,6 @@ int sys_vm86(struct pt_regs *); #else /* CONFIG_X86_32 */ /* X86_64 only */ /* kernel/ioport.c */ asmlinkage long sys_iopl(unsigned int, struct pt_regs *); /* kernel/process_64.c */ asmlinkage long sys_clone(unsigned long, unsigned long, void __user *, void __user *, Loading arch/x86/kernel/entry_32.S +1 −1 Original line number Diff line number Diff line Loading @@ -758,7 +758,7 @@ ptregs_##name: \ addl $4,%esp; \ ret PTREGSCALL0(iopl) PTREGSCALL1(iopl) PTREGSCALL0(fork) PTREGSCALL0(clone) PTREGSCALL0(vfork) Loading arch/x86/kernel/ioport.c +5 −23 Original line number Diff line number Diff line Loading @@ -103,9 +103,10 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on) * on system-call entry - see also fork() and the signal handling * code. */ static int do_iopl(unsigned int level, struct pt_regs *regs) long sys_iopl(unsigned int level, struct pt_regs *regs) { unsigned int old = (regs->flags >> 12) & 3; struct thread_struct *t = ¤t->thread; if (level > 3) return -EINVAL; Loading @@ -115,29 +116,10 @@ static int do_iopl(unsigned int level, struct pt_regs *regs) return -EPERM; } regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12); return 0; } #ifdef CONFIG_X86_32 long sys_iopl(struct pt_regs *regs) { unsigned int level = regs->bx; struct thread_struct *t = ¤t->thread; int rc; rc = do_iopl(level, regs); if (rc < 0) goto out; t->iopl = level << 12; set_iopl_mask(t->iopl); out: return rc; } #else asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs) { return do_iopl(level, regs); } #endif return 0; } Loading
arch/x86/include/asm/syscalls.h +1 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ /* Common in X86_32 and X86_64 */ /* kernel/ioport.c */ asmlinkage long sys_ioperm(unsigned long, unsigned long, int); long sys_iopl(unsigned int, struct pt_regs *); /* kernel/process.c */ int sys_fork(struct pt_regs *); Loading @@ -35,8 +36,6 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *); /* X86_32 only */ #ifdef CONFIG_X86_32 /* kernel/ioport.c */ long sys_iopl(struct pt_regs *); /* kernel/process_32.c */ int sys_clone(struct pt_regs *); Loading Loading @@ -70,9 +69,6 @@ int sys_vm86(struct pt_regs *); #else /* CONFIG_X86_32 */ /* X86_64 only */ /* kernel/ioport.c */ asmlinkage long sys_iopl(unsigned int, struct pt_regs *); /* kernel/process_64.c */ asmlinkage long sys_clone(unsigned long, unsigned long, void __user *, void __user *, Loading
arch/x86/kernel/entry_32.S +1 −1 Original line number Diff line number Diff line Loading @@ -758,7 +758,7 @@ ptregs_##name: \ addl $4,%esp; \ ret PTREGSCALL0(iopl) PTREGSCALL1(iopl) PTREGSCALL0(fork) PTREGSCALL0(clone) PTREGSCALL0(vfork) Loading
arch/x86/kernel/ioport.c +5 −23 Original line number Diff line number Diff line Loading @@ -103,9 +103,10 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on) * on system-call entry - see also fork() and the signal handling * code. */ static int do_iopl(unsigned int level, struct pt_regs *regs) long sys_iopl(unsigned int level, struct pt_regs *regs) { unsigned int old = (regs->flags >> 12) & 3; struct thread_struct *t = ¤t->thread; if (level > 3) return -EINVAL; Loading @@ -115,29 +116,10 @@ static int do_iopl(unsigned int level, struct pt_regs *regs) return -EPERM; } regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) | (level << 12); return 0; } #ifdef CONFIG_X86_32 long sys_iopl(struct pt_regs *regs) { unsigned int level = regs->bx; struct thread_struct *t = ¤t->thread; int rc; rc = do_iopl(level, regs); if (rc < 0) goto out; t->iopl = level << 12; set_iopl_mask(t->iopl); out: return rc; } #else asmlinkage long sys_iopl(unsigned int level, struct pt_regs *regs) { return do_iopl(level, regs); } #endif return 0; }