Loading arch/arm/kernel/calls.S +1 −1 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ CALL(sys_statfs) /* 100 */ CALL(sys_fstatfs) CALL(sys_ni_syscall) CALL(OBSOLETE(sys_socketcall)) CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall))) CALL(sys_syslog) CALL(sys_setitimer) /* 105 */ CALL(sys_getitimer) Loading arch/arm/kernel/sys_oabi-compat.c +30 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ * sys_connect: * sys_sendmsg: * sys_sendto: * sys_socketcall: * * 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 Loading @@ -78,6 +79,7 @@ #include <linux/eventpoll.h> #include <linux/sem.h> #include <linux/socket.h> #include <linux/net.h> #include <asm/ipc.h> #include <asm/uaccess.h> Loading Loading @@ -408,3 +410,31 @@ asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned fla 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
arch/arm/kernel/calls.S +1 −1 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ CALL(sys_statfs) /* 100 */ CALL(sys_fstatfs) CALL(sys_ni_syscall) CALL(OBSOLETE(sys_socketcall)) CALL(OBSOLETE(ABI(sys_socketcall, sys_oabi_socketcall))) CALL(sys_syslog) CALL(sys_setitimer) /* 105 */ CALL(sys_getitimer) Loading
arch/arm/kernel/sys_oabi-compat.c +30 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ * sys_connect: * sys_sendmsg: * sys_sendto: * sys_socketcall: * * 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 Loading @@ -78,6 +79,7 @@ #include <linux/eventpoll.h> #include <linux/sem.h> #include <linux/socket.h> #include <linux/net.h> #include <asm/ipc.h> #include <asm/uaccess.h> Loading Loading @@ -408,3 +410,31 @@ asmlinkage long sys_oabi_sendmsg(int fd, struct msghdr __user *msg, unsigned fla 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; }