]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - arch/x86/kernel/sys_i386_32.c
Add generic sys_ipc wrapper
[mirror_ubuntu-bionic-kernel.git] / arch / x86 / kernel / sys_i386_32.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * This file contains various random system calls that
3 * have a non-standard calling sequence on the Linux/i386
4 * platform.
5 */
6
7#include <linux/errno.h>
8#include <linux/sched.h>
9#include <linux/mm.h>
4e950f6f 10#include <linux/fs.h>
1da177e4 11#include <linux/smp.h>
1da177e4
LT
12#include <linux/sem.h>
13#include <linux/msg.h>
14#include <linux/shm.h>
15#include <linux/stat.h>
16#include <linux/syscalls.h>
17#include <linux/mman.h>
18#include <linux/file.h>
19#include <linux/utsname.h>
cba4fbbf 20#include <linux/ipc.h>
1da177e4 21
5b80fe8b
PC
22#include <linux/uaccess.h>
23#include <linux/unistd.h>
1da177e4 24
bbc1f698
JS
25#include <asm/syscalls.h>
26
1da177e4
LT
27/*
28 * Old cruft
29 */
5b80fe8b 30asmlinkage int sys_uname(struct old_utsname __user *name)
1da177e4
LT
31{
32 int err;
33 if (!name)
34 return -EFAULT;
35 down_read(&uts_sem);
5b80fe8b 36 err = copy_to_user(name, utsname(), sizeof(*name));
1da177e4 37 up_read(&uts_sem);
5b80fe8b 38 return err? -EFAULT:0;
1da177e4
LT
39}
40
5b80fe8b 41asmlinkage int sys_olduname(struct oldold_utsname __user *name)
1da177e4
LT
42{
43 int error;
44
45 if (!name)
46 return -EFAULT;
5b80fe8b 47 if (!access_ok(VERIFY_WRITE, name, sizeof(struct oldold_utsname)))
1da177e4 48 return -EFAULT;
5b80fe8b
PC
49
50 down_read(&uts_sem);
51
e9ff3990
SH
52 error = __copy_to_user(&name->sysname, &utsname()->sysname,
53 __OLD_UTS_LEN);
54 error |= __put_user(0, name->sysname + __OLD_UTS_LEN);
55 error |= __copy_to_user(&name->nodename, &utsname()->nodename,
56 __OLD_UTS_LEN);
57 error |= __put_user(0, name->nodename + __OLD_UTS_LEN);
58 error |= __copy_to_user(&name->release, &utsname()->release,
59 __OLD_UTS_LEN);
60 error |= __put_user(0, name->release + __OLD_UTS_LEN);
61 error |= __copy_to_user(&name->version, &utsname()->version,
62 __OLD_UTS_LEN);
63 error |= __put_user(0, name->version + __OLD_UTS_LEN);
64 error |= __copy_to_user(&name->machine, &utsname()->machine,
65 __OLD_UTS_LEN);
66 error |= __put_user(0, name->machine + __OLD_UTS_LEN);
5b80fe8b 67
1da177e4 68 up_read(&uts_sem);
5b80fe8b 69
1da177e4
LT
70 error = error ? -EFAULT : 0;
71
72 return error;
73}
fe74290d
AB
74
75
76/*
77 * Do a system call from kernel instead of calling sys_execve so we
78 * end up with proper pt_regs.
79 */
80int kernel_execve(const char *filename, char *const argv[], char *const envp[])
81{
82 long __res;
83 asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx"
84 : "=a" (__res)
5b80fe8b 85 : "0" (__NR_execve), "ri" (filename), "c" (argv), "d" (envp) : "memory");
fe74290d
AB
86 return __res;
87}