|
@@ -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:
|