[ARM] 3338/1: old ABI compat: sys_socketcall
Patch from Nicolas Pitre
Commit 99595d0237
forgot to intercept
sys_socketcall as well.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
3dfaf7a68e
commit
6c0fa49b18
|
@ -111,7 +111,7 @@
|
||||||
CALL(sys_statfs)
|
CALL(sys_statfs)
|
||||||
/* 100 */ CALL(sys_fstatfs)
|
/* 100 */ CALL(sys_fstatfs)
|
||||||
CALL(sys_ni_syscall)
|
CALL(sys_ni_syscall)
|
||||||
CALL(OBSOLETE(sys_socketcall))
|
CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall)))
|
||||||
CALL(sys_syslog)
|
CALL(sys_syslog)
|
||||||
CALL(sys_setitimer)
|
CALL(sys_setitimer)
|
||||||
/* 105 */ CALL(sys_getitimer)
|
/* 105 */ CALL(sys_getitimer)
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
* sys_connect:
|
* sys_connect:
|
||||||
* sys_sendmsg:
|
* sys_sendmsg:
|
||||||
* sys_sendto:
|
* sys_sendto:
|
||||||
|
* sys_socketcall:
|
||||||
*
|
*
|
||||||
* struct sockaddr_un loses its padding with EABI. Since the size of the
|
* struct sockaddr_un loses its padding with EABI. Since the size of the
|
||||||
* structure is used as a validation test in unix_mkname(), we need to
|
* structure is used as a validation test in unix_mkname(), we need to
|
||||||
|
@ -78,6 +79,7 @@
|
||||||
#include <linux/eventpoll.h>
|
#include <linux/eventpoll.h>
|
||||||
#include <linux/sem.h>
|
#include <linux/sem.h>
|
||||||
#include <linux/socket.h>
|
#include <linux/socket.h>
|
||||||
|
#include <linux/net.h>
|
||||||
#include <asm/ipc.h>
|
#include <asm/ipc.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
|
||||||
|
@ -408,3 +410,31 @@ asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned fla
|
||||||
return sys_sendmsg(fd, msg, flags);
|
return sys_sendmsg(fd, msg, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
asmlinkage long sys_oabi_socketcall(int call, unsigned long __user *args)
|
||||||
|
{
|
||||||
|
unsigned long r = -EFAULT, a[6];
|
||||||
|
|
||||||
|
switch (call) {
|
||||||
|
case SYS_BIND:
|
||||||
|
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||||
|
r = sys_oabi_bind(a[0], (struct sockaddr __user *)a[1], a[2]);
|
||||||
|
break;
|
||||||
|
case SYS_CONNECT:
|
||||||
|
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||||
|
r = sys_oabi_connect(a[0], (struct sockaddr __user *)a[1], a[2]);
|
||||||
|
break;
|
||||||
|
case SYS_SENDTO:
|
||||||
|
if (copy_from_user(a, args, 6 * sizeof(long)) == 0)
|
||||||
|
r = sys_oabi_sendto(a[0], (void __user *)a[1], a[2], a[3],
|
||||||
|
(struct sockaddr __user *)a[4], a[5]);
|
||||||
|
break;
|
||||||
|
case SYS_SENDMSG:
|
||||||
|
if (copy_from_user(a, args, 3 * sizeof(long)) == 0)
|
||||||
|
r = sys_oabi_sendmsg(a[0], (struct msghdr __user *)a[1], a[2]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
r = sys_socketcall(call, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue