aboutsummaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-04-02 15:51:41 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-04-02 15:51:41 -0400
commit7125764c5d1a5c72d522f1011b6cc8b8100b48fe (patch)
tree678f3355ac872a4379b28dbe36f5beddd0e284d8 /ipc
parentc6f21243ce1e8d81ad8361da4d2eaa5947b667c4 (diff)
parentdce44e03b0a3448ad11ac6c6e0cbe299e0400791 (diff)
Merge branch 'x86-x32-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull compat time conversion changes from Peter Anvin: "Despite the branch name this is really neither an x86 nor an x32-specific patchset, although it the implementation of the discussions that followed the x32 security hole a few months ago. This removes get/put_compat_timespec/val() and replaces them with compat_get/put_timespec/val() which are savvy as to the current status of COMPAT_USE_64BIT_TIME. It removes several unused and/or incorrect/misleading functions (like compat_put_timeval_convert which doesn't in fact do any conversion) and also replaces several open-coded implementations what is now called compat_convert_timespec() with that function" * 'x86-x32-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: compat: Fix sparse address space warnings compat: Get rid of (get|put)_compat_time(val|spec)
Diffstat (limited to 'ipc')
-rw-r--r--ipc/compat.c12
-rw-r--r--ipc/compat_mq.c19
2 files changed, 6 insertions, 25 deletions
diff --git a/ipc/compat.c b/ipc/compat.c
index 98b9016cab6c..a4695ada3275 100644
--- a/ipc/compat.c
+++ b/ipc/compat.c
@@ -753,14 +753,8 @@ COMPAT_SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsems,
753 unsigned, nsops, 753 unsigned, nsops,
754 const struct compat_timespec __user *, timeout) 754 const struct compat_timespec __user *, timeout)
755{ 755{
756 struct timespec __user *ts64 = NULL; 756 struct timespec __user *ts64;
757 if (timeout) { 757 if (compat_convert_timespec(&ts64, timeout))
758 struct timespec ts; 758 return -EFAULT;
759 ts64 = compat_alloc_user_space(sizeof(*ts64));
760 if (get_compat_timespec(&ts, timeout))
761 return -EFAULT;
762 if (copy_to_user(ts64, &ts, sizeof(ts)))
763 return -EFAULT;
764 }
765 return sys_semtimedop(semid, tsems, nsops, ts64); 759 return sys_semtimedop(semid, tsems, nsops, ts64);
766} 760}
diff --git a/ipc/compat_mq.c b/ipc/compat_mq.c
index d58747293772..90d29f59cac6 100644
--- a/ipc/compat_mq.c
+++ b/ipc/compat_mq.c
@@ -64,20 +64,6 @@ COMPAT_SYSCALL_DEFINE4(mq_open, const char __user *, u_name,
64 return sys_mq_open(u_name, oflag, mode, p); 64 return sys_mq_open(u_name, oflag, mode, p);
65} 65}
66 66
67static int compat_prepare_timeout(struct timespec __user **p,
68 const struct compat_timespec __user *u)
69{
70 struct timespec ts;
71 if (!u) {
72 *p = NULL;
73 return 0;
74 }
75 *p = compat_alloc_user_space(sizeof(ts));
76 if (get_compat_timespec(&ts, u) || copy_to_user(*p, &ts, sizeof(ts)))
77 return -EFAULT;
78 return 0;
79}
80
81COMPAT_SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, 67COMPAT_SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes,
82 const char __user *, u_msg_ptr, 68 const char __user *, u_msg_ptr,
83 compat_size_t, msg_len, unsigned int, msg_prio, 69 compat_size_t, msg_len, unsigned int, msg_prio,
@@ -85,7 +71,7 @@ COMPAT_SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes,
85{ 71{
86 struct timespec __user *u_ts; 72 struct timespec __user *u_ts;
87 73
88 if (compat_prepare_timeout(&u_ts, u_abs_timeout)) 74 if (compat_convert_timespec(&u_ts, u_abs_timeout))
89 return -EFAULT; 75 return -EFAULT;
90 76
91 return sys_mq_timedsend(mqdes, u_msg_ptr, msg_len, 77 return sys_mq_timedsend(mqdes, u_msg_ptr, msg_len,
@@ -98,7 +84,8 @@ COMPAT_SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes,
98 const struct compat_timespec __user *, u_abs_timeout) 84 const struct compat_timespec __user *, u_abs_timeout)
99{ 85{
100 struct timespec __user *u_ts; 86 struct timespec __user *u_ts;
101 if (compat_prepare_timeout(&u_ts, u_abs_timeout)) 87
88 if (compat_convert_timespec(&u_ts, u_abs_timeout))
102 return -EFAULT; 89 return -EFAULT;
103 90
104 return sys_mq_timedreceive(mqdes, u_msg_ptr, msg_len, 91 return sys_mq_timedreceive(mqdes, u_msg_ptr, msg_len,