diff options
| -rw-r--r-- | arch/x86/include/asm/syscalls.h | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/entry_32.S | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/vm86_32.c | 11 |
3 files changed, 9 insertions, 10 deletions
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 94e0b61fb040..df2c51106565 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
| @@ -66,8 +66,8 @@ asmlinkage int sys_uname(struct old_utsname __user *); | |||
| 66 | asmlinkage int sys_olduname(struct oldold_utsname __user *); | 66 | asmlinkage int sys_olduname(struct oldold_utsname __user *); |
| 67 | 67 | ||
| 68 | /* kernel/vm86_32.c */ | 68 | /* kernel/vm86_32.c */ |
| 69 | int sys_vm86old(struct pt_regs *); | 69 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); |
| 70 | int sys_vm86(struct pt_regs *); | 70 | int sys_vm86(unsigned long, unsigned long, struct pt_regs *); |
| 71 | 71 | ||
| 72 | #else /* CONFIG_X86_32 */ | 72 | #else /* CONFIG_X86_32 */ |
| 73 | 73 | ||
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 621ef4599416..6c2f25d9b9d5 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -766,8 +766,8 @@ PTREGSCALL3(execve) | |||
| 766 | PTREGSCALL2(sigaltstack) | 766 | PTREGSCALL2(sigaltstack) |
| 767 | PTREGSCALL0(sigreturn) | 767 | PTREGSCALL0(sigreturn) |
| 768 | PTREGSCALL0(rt_sigreturn) | 768 | PTREGSCALL0(rt_sigreturn) |
| 769 | PTREGSCALL0(vm86) | 769 | PTREGSCALL2(vm86) |
| 770 | PTREGSCALL0(vm86old) | 770 | PTREGSCALL1(vm86old) |
| 771 | 771 | ||
| 772 | .macro FIXUP_ESPFIX_STACK | 772 | .macro FIXUP_ESPFIX_STACK |
| 773 | /* | 773 | /* |
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c index 9c4e62539058..5ffb5622f793 100644 --- a/arch/x86/kernel/vm86_32.c +++ b/arch/x86/kernel/vm86_32.c | |||
| @@ -197,9 +197,8 @@ out: | |||
| 197 | static int do_vm86_irq_handling(int subfunction, int irqnumber); | 197 | static int do_vm86_irq_handling(int subfunction, int irqnumber); |
| 198 | static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk); | 198 | static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk); |
| 199 | 199 | ||
| 200 | int sys_vm86old(struct pt_regs *regs) | 200 | int sys_vm86old(struct vm86_struct __user *v86, struct pt_regs *regs) |
| 201 | { | 201 | { |
| 202 | struct vm86_struct __user *v86 = (struct vm86_struct __user *)regs->bx; | ||
| 203 | struct kernel_vm86_struct info; /* declare this _on top_, | 202 | struct kernel_vm86_struct info; /* declare this _on top_, |
| 204 | * this avoids wasting of stack space. | 203 | * this avoids wasting of stack space. |
| 205 | * This remains on the stack until we | 204 | * This remains on the stack until we |
| @@ -227,7 +226,7 @@ out: | |||
| 227 | } | 226 | } |
| 228 | 227 | ||
| 229 | 228 | ||
| 230 | int sys_vm86(struct pt_regs *regs) | 229 | int sys_vm86(unsigned long cmd, unsigned long arg, struct pt_regs *regs) |
| 231 | { | 230 | { |
| 232 | struct kernel_vm86_struct info; /* declare this _on top_, | 231 | struct kernel_vm86_struct info; /* declare this _on top_, |
| 233 | * this avoids wasting of stack space. | 232 | * this avoids wasting of stack space. |
| @@ -239,12 +238,12 @@ int sys_vm86(struct pt_regs *regs) | |||
| 239 | struct vm86plus_struct __user *v86; | 238 | struct vm86plus_struct __user *v86; |
| 240 | 239 | ||
| 241 | tsk = current; | 240 | tsk = current; |
| 242 | switch (regs->bx) { | 241 | switch (cmd) { |
| 243 | case VM86_REQUEST_IRQ: | 242 | case VM86_REQUEST_IRQ: |
| 244 | case VM86_FREE_IRQ: | 243 | case VM86_FREE_IRQ: |
| 245 | case VM86_GET_IRQ_BITS: | 244 | case VM86_GET_IRQ_BITS: |
| 246 | case VM86_GET_AND_RESET_IRQ: | 245 | case VM86_GET_AND_RESET_IRQ: |
| 247 | ret = do_vm86_irq_handling(regs->bx, (int)regs->cx); | 246 | ret = do_vm86_irq_handling(cmd, (int)arg); |
| 248 | goto out; | 247 | goto out; |
| 249 | case VM86_PLUS_INSTALL_CHECK: | 248 | case VM86_PLUS_INSTALL_CHECK: |
| 250 | /* | 249 | /* |
| @@ -261,7 +260,7 @@ int sys_vm86(struct pt_regs *regs) | |||
| 261 | ret = -EPERM; | 260 | ret = -EPERM; |
| 262 | if (tsk->thread.saved_sp0) | 261 | if (tsk->thread.saved_sp0) |
| 263 | goto out; | 262 | goto out; |
| 264 | v86 = (struct vm86plus_struct __user *)regs->cx; | 263 | v86 = (struct vm86plus_struct __user *)arg; |
| 265 | tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, | 264 | tmp = copy_vm86_regs_from_user(&info.regs, &v86->regs, |
| 266 | offsetof(struct kernel_vm86_struct, regs32) - | 265 | offsetof(struct kernel_vm86_struct, regs32) - |
| 267 | sizeof(info.regs)); | 266 | sizeof(info.regs)); |
