From 7e67f25c03d2d82da9594a3f36e439b6b5fdc52c Mon Sep 17 00:00:00 2001 From: Packit Service Date: Apr 16 2021 22:38:45 +0000 Subject: Apply patch glibc-rh1912670-4.patch patch_name: glibc-rh1912670-4.patch present_in_specfile: true location_in_specfile: 553 --- diff --git a/sysdeps/unix/sysv/linux/msgctl.c b/sysdeps/unix/sysv/linux/msgctl.c index 7280cba..3362f45 100644 --- a/sysdeps/unix/sysv/linux/msgctl.c +++ b/sysdeps/unix/sysv/linux/msgctl.c @@ -29,6 +29,20 @@ int __new_msgctl (int msqid, int cmd, struct msqid_ds *buf) { + switch (cmd) + { + case IPC_RMID: + case IPC_SET: + case IPC_STAT: + case MSG_STAT: + case MSG_STAT_ANY: + case IPC_INFO: + case MSG_INFO: + break; + default: + __set_errno (EINVAL); + return -1; + } #ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS return INLINE_SYSCALL_CALL (msgctl, msqid, cmd | __IPC_64, buf); #else diff --git a/sysvipc/test-sysvipc.h b/sysvipc/test-sysvipc.h index d7ed496..21ef6c6 100644 --- a/sysvipc/test-sysvipc.h +++ b/sysvipc/test-sysvipc.h @@ -82,4 +82,29 @@ first_sem_invalid_cmd (void) return invalid; } +/* Return the first invalid command SysV IPC command for message queue. */ +static inline int +first_msg_invalid_cmd (void) +{ + const int msg_cmds[] = { + MSG_STAT, + MSG_INFO, +#ifdef MSG_STAT_ANY + MSG_STAT_ANY, +#endif + }; + + int invalid = first_common_invalid_cmd (); + for (int i = 0; i < array_length (msg_cmds); i++) + { + if (invalid == msg_cmds[i]) + { + invalid++; + i = 0; + } + } + + return invalid; +} + #endif /* _TEST_SYSV_H */ diff --git a/sysvipc/test-sysvmsg.c b/sysvipc/test-sysvmsg.c index 1e04718..74a907a 100644 --- a/sysvipc/test-sysvmsg.c +++ b/sysvipc/test-sysvmsg.c @@ -24,6 +24,8 @@ #include #include +#include + #include #include #include @@ -86,6 +88,9 @@ do_test (void) FAIL_EXIT1 ("msgget failed (errno=%d)", errno); } + TEST_COMPARE (msgctl (msqid, first_msg_invalid_cmd (), NULL), -1); + TEST_COMPARE (errno, EINVAL); + /* Get message queue kernel information and do some sanity checks. */ struct msqid_ds msginfo; if (msgctl (msqid, IPC_STAT, &msginfo) == -1)