]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - ipc/mqueue.c
Merge branch 'next-tpm' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux.git] / ipc / mqueue.c
index a808f29d4c5a474bfde180cfa8b73a82843a453d..c0d58f390c3b43342a6c0fe53c6fd8e0d5ebb391 100644 (file)
@@ -691,7 +691,7 @@ static void __do_notify(struct mqueue_inode_info *info)
        wake_up(&info->wait_q);
 }
 
-static int prepare_timeout(const struct timespec __user *u_abs_timeout,
+static int prepare_timeout(const struct __kernel_timespec __user *u_abs_timeout,
                           struct timespec64 *ts)
 {
        if (get_timespec64(ts, u_abs_timeout))
@@ -1128,7 +1128,7 @@ static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
 
 SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
                size_t, msg_len, unsigned int, msg_prio,
-               const struct timespec __user *, u_abs_timeout)
+               const struct __kernel_timespec __user *, u_abs_timeout)
 {
        struct timespec64 ts, *p = NULL;
        if (u_abs_timeout) {
@@ -1142,7 +1142,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
 
 SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
                size_t, msg_len, unsigned int __user *, u_msg_prio,
-               const struct timespec __user *, u_abs_timeout)
+               const struct __kernel_timespec __user *, u_abs_timeout)
 {
        struct timespec64 ts, *p = NULL;
        if (u_abs_timeout) {
@@ -1420,6 +1420,47 @@ COMPAT_SYSCALL_DEFINE4(mq_open, const char __user *, u_name,
        return do_mq_open(u_name, oflag, mode, p);
 }
 
+COMPAT_SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
+                      const struct compat_sigevent __user *, u_notification)
+{
+       struct sigevent n, *p = NULL;
+       if (u_notification) {
+               if (get_compat_sigevent(&n, u_notification))
+                       return -EFAULT;
+               if (n.sigev_notify == SIGEV_THREAD)
+                       n.sigev_value.sival_ptr = compat_ptr(n.sigev_value.sival_int);
+               p = &n;
+       }
+       return do_mq_notify(mqdes, p);
+}
+
+COMPAT_SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
+                      const struct compat_mq_attr __user *, u_mqstat,
+                      struct compat_mq_attr __user *, u_omqstat)
+{
+       int ret;
+       struct mq_attr mqstat, omqstat;
+       struct mq_attr *new = NULL, *old = NULL;
+
+       if (u_mqstat) {
+               new = &mqstat;
+               if (get_compat_mq_attr(new, u_mqstat))
+                       return -EFAULT;
+       }
+       if (u_omqstat)
+               old = &omqstat;
+
+       ret = do_mq_getsetattr(mqdes, new, old);
+       if (ret || !old)
+               return ret;
+
+       if (put_compat_mq_attr(old, u_omqstat))
+               return -EFAULT;
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_COMPAT_32BIT_TIME
 static int compat_prepare_timeout(const struct compat_timespec __user *p,
                                   struct timespec64 *ts)
 {
@@ -1459,45 +1500,6 @@ COMPAT_SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes,
        }
        return do_mq_timedreceive(mqdes, u_msg_ptr, msg_len, u_msg_prio, p);
 }
-
-COMPAT_SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes,
-                      const struct compat_sigevent __user *, u_notification)
-{
-       struct sigevent n, *p = NULL;
-       if (u_notification) {
-               if (get_compat_sigevent(&n, u_notification))
-                       return -EFAULT;
-               if (n.sigev_notify == SIGEV_THREAD)
-                       n.sigev_value.sival_ptr = compat_ptr(n.sigev_value.sival_int);
-               p = &n;
-       }
-       return do_mq_notify(mqdes, p);
-}
-
-COMPAT_SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes,
-                      const struct compat_mq_attr __user *, u_mqstat,
-                      struct compat_mq_attr __user *, u_omqstat)
-{
-       int ret;
-       struct mq_attr mqstat, omqstat;
-       struct mq_attr *new = NULL, *old = NULL;
-
-       if (u_mqstat) {
-               new = &mqstat;
-               if (get_compat_mq_attr(new, u_mqstat))
-                       return -EFAULT;
-       }
-       if (u_omqstat)
-               old = &omqstat;
-
-       ret = do_mq_getsetattr(mqdes, new, old);
-       if (ret || !old)
-               return ret;
-
-       if (put_compat_mq_attr(old, u_omqstat))
-               return -EFAULT;
-       return 0;
-}
 #endif
 
 static const struct inode_operations mqueue_dir_inode_operations = {