]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - ipc/syscall.c
Merge branch 'next-tpm' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux.git] / ipc / syscall.c
index 77a883ef2ecab4ffe9ba4b692616336df0b894ea..65d405f1ba0c0d31f70a8b34e42acdf90c29816d 100644 (file)
@@ -30,9 +30,14 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
                return ksys_semtimedop(first, (struct sembuf __user *)ptr,
                                       second, NULL);
        case SEMTIMEDOP:
-               return ksys_semtimedop(first, (struct sembuf __user *)ptr,
-                                      second,
-                                      (const struct timespec __user *)fifth);
+               if (IS_ENABLED(CONFIG_64BIT) || !IS_ENABLED(CONFIG_64BIT_TIME))
+                       return ksys_semtimedop(first, ptr, second,
+                               (const struct __kernel_timespec __user *)fifth);
+               else if (IS_ENABLED(CONFIG_COMPAT_32BIT_TIME))
+                       return compat_ksys_semtimedop(first, ptr, second,
+                               (const struct compat_timespec __user *)fifth);
+               else
+                       return -ENOSYS;
 
        case SEMGET:
                return ksys_semget(first, second, third);
@@ -130,6 +135,8 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
                /* struct sembuf is the same on 32 and 64bit :)) */
                return ksys_semtimedop(first, compat_ptr(ptr), second, NULL);
        case SEMTIMEDOP:
+               if (!IS_ENABLED(CONFIG_COMPAT_32BIT_TIME))
+                       return -ENOSYS;
                return compat_ksys_semtimedop(first, compat_ptr(ptr), second,
                                                compat_ptr(fifth));
        case SEMGET: