merge compat sys_ipc instances
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
d5dc77bfee
Коммит
56e41d3c5a
|
@ -119,75 +119,6 @@ SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf,
|
||||||
return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
|
return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SYSVIPC
|
|
||||||
|
|
||||||
SYSCALL_DEFINE6(32_ipc, u32, call, long, first, long, second, long, third,
|
|
||||||
unsigned long, ptr, unsigned long, fifth)
|
|
||||||
{
|
|
||||||
int version, err;
|
|
||||||
|
|
||||||
version = call >> 16; /* hack for backward compatibility */
|
|
||||||
call &= 0xffff;
|
|
||||||
|
|
||||||
switch (call) {
|
|
||||||
case SEMOP:
|
|
||||||
/* struct sembuf is the same on 32 and 64bit :)) */
|
|
||||||
err = sys_semtimedop(first, compat_ptr(ptr), second, NULL);
|
|
||||||
break;
|
|
||||||
case SEMTIMEDOP:
|
|
||||||
err = compat_sys_semtimedop(first, compat_ptr(ptr), second,
|
|
||||||
compat_ptr(fifth));
|
|
||||||
break;
|
|
||||||
case SEMGET:
|
|
||||||
err = sys_semget(first, second, third);
|
|
||||||
break;
|
|
||||||
case SEMCTL:
|
|
||||||
err = compat_sys_semctl(first, second, third, compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case MSGSND:
|
|
||||||
err = compat_sys_msgsnd(first, second, third, compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case MSGRCV:
|
|
||||||
err = compat_sys_msgrcv(first, second, fifth, third,
|
|
||||||
version, compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case MSGGET:
|
|
||||||
err = sys_msgget((key_t) first, second);
|
|
||||||
break;
|
|
||||||
case MSGCTL:
|
|
||||||
err = compat_sys_msgctl(first, second, compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case SHMAT:
|
|
||||||
err = compat_sys_shmat(first, second, third, version,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case SHMDT:
|
|
||||||
err = sys_shmdt(compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
case SHMGET:
|
|
||||||
err = sys_shmget(first, (unsigned)second, third);
|
|
||||||
break;
|
|
||||||
case SHMCTL:
|
|
||||||
err = compat_sys_shmctl(first, second, compat_ptr(ptr));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
err = -EINVAL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
SYSCALL_DEFINE6(32_ipc, u32, call, int, first, int, second, int, third,
|
|
||||||
u32, ptr, u32, fifth)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* CONFIG_SYSVIPC */
|
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS32_N32
|
#ifdef CONFIG_MIPS32_N32
|
||||||
SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg)
|
SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -309,7 +309,7 @@ sys_call_table:
|
||||||
PTR compat_sys_wait4
|
PTR compat_sys_wait4
|
||||||
PTR sys_swapoff /* 4115 */
|
PTR sys_swapoff /* 4115 */
|
||||||
PTR compat_sys_sysinfo
|
PTR compat_sys_sysinfo
|
||||||
PTR sys_32_ipc
|
PTR compat_sys_ipc
|
||||||
PTR sys_fsync
|
PTR sys_fsync
|
||||||
PTR sys32_sigreturn
|
PTR sys32_sigreturn
|
||||||
PTR __sys_clone /* 4120 */
|
PTR __sys_clone /* 4120 */
|
||||||
|
|
|
@ -61,73 +61,6 @@ asmlinkage long ppc32_select(u32 n, compat_ulong_t __user *inp,
|
||||||
return compat_sys_select((int)n, inp, outp, exp, compat_ptr(tvp_x));
|
return compat_sys_select((int)n, inp, outp, exp, compat_ptr(tvp_x));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SYSVIPC
|
|
||||||
long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr,
|
|
||||||
u32 fifth)
|
|
||||||
{
|
|
||||||
int version;
|
|
||||||
|
|
||||||
version = call >> 16; /* hack for backward compatibility */
|
|
||||||
call &= 0xffff;
|
|
||||||
|
|
||||||
switch (call) {
|
|
||||||
|
|
||||||
case SEMTIMEDOP:
|
|
||||||
if (fifth)
|
|
||||||
/* sign extend semid */
|
|
||||||
return compat_sys_semtimedop((int)first,
|
|
||||||
compat_ptr(ptr), second,
|
|
||||||
compat_ptr(fifth));
|
|
||||||
/* else fall through for normal semop() */
|
|
||||||
case SEMOP:
|
|
||||||
/* struct sembuf is the same on 32 and 64bit :)) */
|
|
||||||
/* sign extend semid */
|
|
||||||
return sys_semtimedop((int)first, compat_ptr(ptr), second,
|
|
||||||
NULL);
|
|
||||||
case SEMGET:
|
|
||||||
/* sign extend key, nsems */
|
|
||||||
return sys_semget((int)first, (int)second, third);
|
|
||||||
case SEMCTL:
|
|
||||||
/* sign extend semid, semnum */
|
|
||||||
return compat_sys_semctl((int)first, (int)second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
|
|
||||||
case MSGSND:
|
|
||||||
/* sign extend msqid */
|
|
||||||
return compat_sys_msgsnd((int)first, (int)second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case MSGRCV:
|
|
||||||
/* sign extend msqid, msgtyp */
|
|
||||||
return compat_sys_msgrcv((int)first, second, (int)fifth,
|
|
||||||
third, version, compat_ptr(ptr));
|
|
||||||
case MSGGET:
|
|
||||||
/* sign extend key */
|
|
||||||
return sys_msgget((int)first, second);
|
|
||||||
case MSGCTL:
|
|
||||||
/* sign extend msqid */
|
|
||||||
return compat_sys_msgctl((int)first, second, compat_ptr(ptr));
|
|
||||||
|
|
||||||
case SHMAT:
|
|
||||||
/* sign extend shmid */
|
|
||||||
return compat_sys_shmat((int)first, second, third, version,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case SHMDT:
|
|
||||||
return sys_shmdt(compat_ptr(ptr));
|
|
||||||
case SHMGET:
|
|
||||||
/* sign extend key_t */
|
|
||||||
return sys_shmget((int)first, second, third);
|
|
||||||
case SHMCTL:
|
|
||||||
/* sign extend shmid */
|
|
||||||
return compat_sys_shmctl((int)first, second, compat_ptr(ptr));
|
|
||||||
|
|
||||||
default:
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long compat_sys_mmap2(unsigned long addr, size_t len,
|
unsigned long compat_sys_mmap2(unsigned long addr, size_t len,
|
||||||
unsigned long prot, unsigned long flags,
|
unsigned long prot, unsigned long flags,
|
||||||
unsigned long fd, unsigned long pgoff)
|
unsigned long fd, unsigned long pgoff)
|
||||||
|
|
|
@ -288,51 +288,13 @@ asmlinkage long sys32_getegid16(void)
|
||||||
return high2lowgid(from_kgid_munged(current_user_ns(), current_egid()));
|
return high2lowgid(from_kgid_munged(current_user_ns(), current_egid()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* sys32_ipc() is the de-multiplexer for the SysV IPC calls in 32bit emulation.
|
|
||||||
*
|
|
||||||
* This is really horribly ugly.
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_SYSVIPC
|
#ifdef CONFIG_SYSVIPC
|
||||||
asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
|
COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second,
|
||||||
|
unsigned long, third, compat_uptr_t, ptr)
|
||||||
{
|
{
|
||||||
if (call >> 16) /* hack for backward compatibility */
|
if (call >> 16) /* hack for backward compatibility */
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
switch (call) {
|
return compat_sys_ipc(call, first, second, third, ptr, third);
|
||||||
case SEMTIMEDOP:
|
|
||||||
return compat_sys_semtimedop(first, compat_ptr(ptr),
|
|
||||||
second, compat_ptr(third));
|
|
||||||
case SEMOP:
|
|
||||||
/* struct sembuf is the same on 32 and 64bit :)) */
|
|
||||||
return sys_semtimedop(first, compat_ptr(ptr),
|
|
||||||
second, NULL);
|
|
||||||
case SEMGET:
|
|
||||||
return sys_semget(first, second, third);
|
|
||||||
case SEMCTL:
|
|
||||||
return compat_sys_semctl(first, second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case MSGSND:
|
|
||||||
return compat_sys_msgsnd(first, second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case MSGRCV:
|
|
||||||
return compat_sys_msgrcv(first, second, 0, third,
|
|
||||||
0, compat_ptr(ptr));
|
|
||||||
case MSGGET:
|
|
||||||
return sys_msgget((key_t) first, second);
|
|
||||||
case MSGCTL:
|
|
||||||
return compat_sys_msgctl(first, second, compat_ptr(ptr));
|
|
||||||
case SHMAT:
|
|
||||||
return compat_sys_shmat(first, second, third,
|
|
||||||
0, compat_ptr(ptr));
|
|
||||||
case SHMDT:
|
|
||||||
return sys_shmdt(compat_ptr(ptr));
|
|
||||||
case SHMGET:
|
|
||||||
return sys_shmget(first, (unsigned)second, third);
|
|
||||||
case SHMCTL:
|
|
||||||
return compat_sys_shmctl(first, second, compat_ptr(ptr));
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,6 @@ long sys32_getuid16(void);
|
||||||
long sys32_geteuid16(void);
|
long sys32_geteuid16(void);
|
||||||
long sys32_getgid16(void);
|
long sys32_getgid16(void);
|
||||||
long sys32_getegid16(void);
|
long sys32_getegid16(void);
|
||||||
long sys32_ipc(u32 call, int first, int second, int third, u32 ptr);
|
|
||||||
long sys32_truncate64(const char __user * path, unsigned long high,
|
long sys32_truncate64(const char __user * path, unsigned long high,
|
||||||
unsigned long low);
|
unsigned long low);
|
||||||
long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned long low);
|
long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned long low);
|
||||||
|
|
|
@ -388,14 +388,6 @@ ENTRY(compat_sys_sysinfo_wrapper)
|
||||||
llgtr %r2,%r2 # struct sysinfo_emu31 *
|
llgtr %r2,%r2 # struct sysinfo_emu31 *
|
||||||
jg compat_sys_sysinfo # branch to system call
|
jg compat_sys_sysinfo # branch to system call
|
||||||
|
|
||||||
ENTRY(sys32_ipc_wrapper)
|
|
||||||
llgfr %r2,%r2 # uint
|
|
||||||
lgfr %r3,%r3 # int
|
|
||||||
lgfr %r4,%r4 # int
|
|
||||||
lgfr %r5,%r5 # int
|
|
||||||
llgfr %r6,%r6 # u32
|
|
||||||
jg sys32_ipc # branch to system call
|
|
||||||
|
|
||||||
ENTRY(sys32_fsync_wrapper)
|
ENTRY(sys32_fsync_wrapper)
|
||||||
llgfr %r2,%r2 # unsigned int
|
llgfr %r2,%r2 # unsigned int
|
||||||
jg sys_fsync # branch to system call
|
jg sys_fsync # branch to system call
|
||||||
|
|
|
@ -125,7 +125,7 @@ NI_SYSCALL /* vm86old for i386 */
|
||||||
SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4)
|
SYSCALL(sys_wait4,sys_wait4,compat_sys_wait4)
|
||||||
SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */
|
SYSCALL(sys_swapoff,sys_swapoff,sys32_swapoff_wrapper) /* 115 */
|
||||||
SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper)
|
SYSCALL(sys_sysinfo,sys_sysinfo,compat_sys_sysinfo_wrapper)
|
||||||
SYSCALL(sys_s390_ipc,sys_s390_ipc,sys32_ipc_wrapper)
|
SYSCALL(sys_s390_ipc,sys_s390_ipc,compat_sys_s390_ipc)
|
||||||
SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
|
SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
|
||||||
SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)
|
SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn)
|
||||||
SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */
|
SYSCALL(sys_clone,sys_clone,sys_clone_wrapper) /* 120 */
|
||||||
|
|
|
@ -49,71 +49,6 @@
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/compat_signal.h>
|
#include <asm/compat_signal.h>
|
||||||
|
|
||||||
#ifdef CONFIG_SYSVIPC
|
|
||||||
asmlinkage long compat_sys_ipc(u32 call, u32 first, u32 second, u32 third, compat_uptr_t ptr, u32 fifth)
|
|
||||||
{
|
|
||||||
int version;
|
|
||||||
|
|
||||||
version = call >> 16; /* hack for backward compatibility */
|
|
||||||
call &= 0xffff;
|
|
||||||
|
|
||||||
switch (call) {
|
|
||||||
case SEMTIMEDOP:
|
|
||||||
if (fifth)
|
|
||||||
/* sign extend semid */
|
|
||||||
return compat_sys_semtimedop((int)first,
|
|
||||||
compat_ptr(ptr), second,
|
|
||||||
compat_ptr(fifth));
|
|
||||||
/* else fall through for normal semop() */
|
|
||||||
case SEMOP:
|
|
||||||
/* struct sembuf is the same on 32 and 64bit :)) */
|
|
||||||
/* sign extend semid */
|
|
||||||
return sys_semtimedop((int)first, compat_ptr(ptr), second,
|
|
||||||
NULL);
|
|
||||||
case SEMGET:
|
|
||||||
/* sign extend key, nsems */
|
|
||||||
return sys_semget((int)first, (int)second, third);
|
|
||||||
case SEMCTL:
|
|
||||||
/* sign extend semid, semnum */
|
|
||||||
return compat_sys_semctl((int)first, (int)second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
|
|
||||||
case MSGSND:
|
|
||||||
/* sign extend msqid */
|
|
||||||
return compat_sys_msgsnd((int)first, (int)second, third,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case MSGRCV:
|
|
||||||
/* sign extend msqid, msgtyp */
|
|
||||||
return compat_sys_msgrcv((int)first, second, (int)fifth,
|
|
||||||
third, version, compat_ptr(ptr));
|
|
||||||
case MSGGET:
|
|
||||||
/* sign extend key */
|
|
||||||
return sys_msgget((int)first, second);
|
|
||||||
case MSGCTL:
|
|
||||||
/* sign extend msqid */
|
|
||||||
return compat_sys_msgctl((int)first, second, compat_ptr(ptr));
|
|
||||||
|
|
||||||
case SHMAT:
|
|
||||||
/* sign extend shmid */
|
|
||||||
return compat_sys_shmat((int)first, second, third, version,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case SHMDT:
|
|
||||||
return sys_shmdt(compat_ptr(ptr));
|
|
||||||
case SHMGET:
|
|
||||||
/* sign extend key_t */
|
|
||||||
return sys_shmget((int)first, second, third);
|
|
||||||
case SHMCTL:
|
|
||||||
/* sign extend shmid */
|
|
||||||
return compat_sys_shmctl((int)first, second, compat_ptr(ptr));
|
|
||||||
|
|
||||||
default:
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
|
asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
|
||||||
{
|
{
|
||||||
if ((int)high < 0)
|
if ((int)high < 0)
|
||||||
|
|
|
@ -5,9 +5,6 @@
|
||||||
obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o
|
obj-$(CONFIG_IA32_EMULATION) := ia32entry.o sys_ia32.o ia32_signal.o
|
||||||
obj-$(CONFIG_IA32_EMULATION) += nosyscall.o syscall_ia32.o
|
obj-$(CONFIG_IA32_EMULATION) += nosyscall.o syscall_ia32.o
|
||||||
|
|
||||||
sysv-$(CONFIG_SYSVIPC) := ipc32.o
|
|
||||||
obj-$(CONFIG_IA32_EMULATION) += $(sysv-y)
|
|
||||||
|
|
||||||
obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
|
obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
|
||||||
|
|
||||||
audit-class-$(CONFIG_AUDIT) := audit.o
|
audit-class-$(CONFIG_AUDIT) := audit.o
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/spinlock.h>
|
|
||||||
#include <linux/list.h>
|
|
||||||
#include <linux/syscalls.h>
|
|
||||||
#include <linux/time.h>
|
|
||||||
#include <linux/sem.h>
|
|
||||||
#include <linux/msg.h>
|
|
||||||
#include <linux/shm.h>
|
|
||||||
#include <linux/ipc.h>
|
|
||||||
#include <linux/compat.h>
|
|
||||||
#include <asm/sys_ia32.h>
|
|
||||||
|
|
||||||
asmlinkage long sys32_ipc(u32 call, int first, int second, int third,
|
|
||||||
compat_uptr_t ptr, u32 fifth)
|
|
||||||
{
|
|
||||||
int version;
|
|
||||||
|
|
||||||
version = call >> 16; /* hack for backward compatibility */
|
|
||||||
call &= 0xffff;
|
|
||||||
|
|
||||||
switch (call) {
|
|
||||||
case SEMOP:
|
|
||||||
/* struct sembuf is the same on 32 and 64bit :)) */
|
|
||||||
return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
|
|
||||||
case SEMTIMEDOP:
|
|
||||||
return compat_sys_semtimedop(first, compat_ptr(ptr), second,
|
|
||||||
compat_ptr(fifth));
|
|
||||||
case SEMGET:
|
|
||||||
return sys_semget(first, second, third);
|
|
||||||
case SEMCTL:
|
|
||||||
return compat_sys_semctl(first, second, third, compat_ptr(ptr));
|
|
||||||
|
|
||||||
case MSGSND:
|
|
||||||
return compat_sys_msgsnd(first, second, third, compat_ptr(ptr));
|
|
||||||
case MSGRCV:
|
|
||||||
return compat_sys_msgrcv(first, second, fifth, third,
|
|
||||||
version, compat_ptr(ptr));
|
|
||||||
case MSGGET:
|
|
||||||
return sys_msgget((key_t) first, second);
|
|
||||||
case MSGCTL:
|
|
||||||
return compat_sys_msgctl(first, second, compat_ptr(ptr));
|
|
||||||
|
|
||||||
case SHMAT:
|
|
||||||
return compat_sys_shmat(first, second, third, version,
|
|
||||||
compat_ptr(ptr));
|
|
||||||
case SHMDT:
|
|
||||||
return sys_shmdt(compat_ptr(ptr));
|
|
||||||
case SHMGET:
|
|
||||||
return sys_shmget(first, (unsigned)second, third);
|
|
||||||
case SHMCTL:
|
|
||||||
return compat_sys_shmctl(first, second, compat_ptr(ptr));
|
|
||||||
}
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
|
@ -57,9 +57,6 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
|
||||||
asmlinkage long sys32_sigreturn(void);
|
asmlinkage long sys32_sigreturn(void);
|
||||||
asmlinkage long sys32_rt_sigreturn(void);
|
asmlinkage long sys32_rt_sigreturn(void);
|
||||||
|
|
||||||
/* ia32/ipc32.c */
|
|
||||||
asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
|
|
||||||
|
|
||||||
asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int,
|
asmlinkage long sys32_fanotify_mark(int, unsigned int, u32, u32, int,
|
||||||
const char __user *);
|
const char __user *);
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,7 @@
|
||||||
114 i386 wait4 sys_wait4 compat_sys_wait4
|
114 i386 wait4 sys_wait4 compat_sys_wait4
|
||||||
115 i386 swapoff sys_swapoff
|
115 i386 swapoff sys_swapoff
|
||||||
116 i386 sysinfo sys_sysinfo compat_sys_sysinfo
|
116 i386 sysinfo sys_sysinfo compat_sys_sysinfo
|
||||||
117 i386 ipc sys_ipc sys32_ipc
|
117 i386 ipc sys_ipc compat_sys_ipc
|
||||||
118 i386 fsync sys_fsync
|
118 i386 fsync sys_fsync
|
||||||
119 i386 sigreturn sys_sigreturn stub32_sigreturn
|
119 i386 sigreturn sys_sigreturn stub32_sigreturn
|
||||||
120 i386 clone sys_clone stub32_clone
|
120 i386 clone sys_clone stub32_clone
|
||||||
|
|
|
@ -318,6 +318,7 @@ long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
|
||||||
int version, void __user *uptr);
|
int version, void __user *uptr);
|
||||||
long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
|
long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
|
||||||
void __user *uptr);
|
void __user *uptr);
|
||||||
|
asmlinkage long compat_sys_ipc(u32, int, int, u32, compat_uptr_t, u32);
|
||||||
#else
|
#else
|
||||||
long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
|
long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
|
||||||
long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
|
long compat_sys_msgsnd(int msqid, struct compat_msgbuf __user *msgp,
|
||||||
|
|
44
ipc/compat.c
44
ipc/compat.c
|
@ -368,6 +368,50 @@ long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
|
||||||
return do_msgrcv(first, uptr, second, msgtyp, third,
|
return do_msgrcv(first, uptr, second, msgtyp, third,
|
||||||
compat_do_msg_fill);
|
compat_do_msg_fill);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
|
||||||
|
u32, third, compat_uptr_t, ptr, u32, fifth)
|
||||||
|
{
|
||||||
|
int version;
|
||||||
|
|
||||||
|
version = call >> 16; /* hack for backward compatibility */
|
||||||
|
call &= 0xffff;
|
||||||
|
|
||||||
|
switch (call) {
|
||||||
|
case SEMOP:
|
||||||
|
/* struct sembuf is the same on 32 and 64bit :)) */
|
||||||
|
return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
|
||||||
|
case SEMTIMEDOP:
|
||||||
|
return compat_sys_semtimedop(first, compat_ptr(ptr), second,
|
||||||
|
compat_ptr(fifth));
|
||||||
|
case SEMGET:
|
||||||
|
return sys_semget(first, second, third);
|
||||||
|
case SEMCTL:
|
||||||
|
return compat_sys_semctl(first, second, third, compat_ptr(ptr));
|
||||||
|
|
||||||
|
case MSGSND:
|
||||||
|
return compat_sys_msgsnd(first, second, third, compat_ptr(ptr));
|
||||||
|
case MSGRCV:
|
||||||
|
return compat_sys_msgrcv(first, second, fifth, third,
|
||||||
|
version, compat_ptr(ptr));
|
||||||
|
case MSGGET:
|
||||||
|
return sys_msgget(first, second);
|
||||||
|
case MSGCTL:
|
||||||
|
return compat_sys_msgctl(first, second, compat_ptr(ptr));
|
||||||
|
|
||||||
|
case SHMAT:
|
||||||
|
return compat_sys_shmat(first, second, third, version,
|
||||||
|
compat_ptr(ptr));
|
||||||
|
case SHMDT:
|
||||||
|
return sys_shmdt(compat_ptr(ptr));
|
||||||
|
case SHMGET:
|
||||||
|
return sys_shmget(first, (unsigned)second, third);
|
||||||
|
case SHMCTL:
|
||||||
|
return compat_sys_shmctl(first, second, compat_ptr(ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
long compat_sys_semctl(int semid, int semnum, int cmd, int arg)
|
long compat_sys_semctl(int semid, int semnum, int cmd, int arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -156,7 +156,7 @@ cond_syscall(compat_sys_process_vm_writev);
|
||||||
cond_syscall(sys_pciconfig_read);
|
cond_syscall(sys_pciconfig_read);
|
||||||
cond_syscall(sys_pciconfig_write);
|
cond_syscall(sys_pciconfig_write);
|
||||||
cond_syscall(sys_pciconfig_iobase);
|
cond_syscall(sys_pciconfig_iobase);
|
||||||
cond_syscall(sys32_ipc);
|
cond_syscall(compat_sys_s390_ipc);
|
||||||
cond_syscall(ppc_rtas);
|
cond_syscall(ppc_rtas);
|
||||||
cond_syscall(sys_spu_run);
|
cond_syscall(sys_spu_run);
|
||||||
cond_syscall(sys_spu_create);
|
cond_syscall(sys_spu_create);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче