aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2019-09-05 10:48:38 -0400
committerArnd Bergmann <arnd@arndb.de>2019-09-07 15:42:25 -0400
commitfb377eb80c80339b580831a3c0fcce34a4c9d1ad (patch)
treeec74cca6e1cb4ccd8516491822bb76fd9ff94996 /include/linux
parent78e05972c5e6c8e9ca4c00ccc6985409da69f904 (diff)
ipc: fix sparc64 ipc() wrapper
Matt bisected a sparc64 specific issue with semctl, shmctl and msgctl to a commit from my y2038 series in linux-5.1, as I missed the custom sys_ipc() wrapper that sparc64 uses in place of the generic version that I patched. The problem is that the sys_{sem,shm,msg}ctl() functions in the kernel now do not allow being called with the IPC_64 flag any more, resulting in a -EINVAL error when they don't recognize the command. Instead, the correct way to do this now is to call the internal ksys_old_{sem,shm,msg}ctl() functions to select the API version. As we generally move towards these functions anyway, change all of sparc_ipc() to consistently use those in place of the sys_*() versions, and move the required ksys_*() declarations into linux/syscalls.h The IS_ENABLED(CONFIG_SYSVIPC) check is required to avoid link errors when ipc is disabled. Reported-by: Matt Turner <mattst88@gmail.com> Fixes: 275f22148e87 ("ipc: rename old-style shmctl/semctl/msgctl syscalls") Cc: stable@vger.kernel.org Tested-by: Matt Turner <mattst88@gmail.com> Tested-by: Anatoly Pugachev <matorola@gmail.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/syscalls.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 88145da7d140..f7c561c4dcdd 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -1402,4 +1402,23 @@ static inline unsigned int ksys_personality(unsigned int personality)
1402 return old; 1402 return old;
1403} 1403}
1404 1404
1405/* for __ARCH_WANT_SYS_IPC */
1406long ksys_semtimedop(int semid, struct sembuf __user *tsops,
1407 unsigned int nsops,
1408 const struct __kernel_timespec __user *timeout);
1409long ksys_semget(key_t key, int nsems, int semflg);
1410long ksys_old_semctl(int semid, int semnum, int cmd, unsigned long arg);
1411long ksys_msgget(key_t key, int msgflg);
1412long ksys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
1413long ksys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz,
1414 long msgtyp, int msgflg);
1415long ksys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz,
1416 int msgflg);
1417long ksys_shmget(key_t key, size_t size, int shmflg);
1418long ksys_shmdt(char __user *shmaddr);
1419long ksys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
1420long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems,
1421 unsigned int nsops,
1422 const struct old_timespec32 __user *timeout);
1423
1405#endif 1424#endif