static int do_test (void) { char buf[4]; if (scanf ("%3s", buf) != 1) FAIL_UNSUPPORTED ("IBT not supported"); if (strcmp (buf, "IBT") != 0) FAIL_UNSUPPORTED ("IBT not supported"); TEST_VERIFY_EXIT (signal (SIGSEGV, &sig_handler) != SIG_ERR); /* Call bar via a function pointer to force an IBT violation. */ test (bar); return EXIT_FAILURE; }
static int do_test (void) { atexit (remove_msq); key_t key = ftok (name, 'G'); if (key == -1) FAIL_EXIT1 ("ftok failed"); msqid = msgget (key, MSGQ_MODE | IPC_CREAT); if (msqid == -1) { if (errno == ENOSYS) FAIL_UNSUPPORTED ("msgget not supported"); FAIL_EXIT1 ("msgget failed (errno=%d)", errno); } /* Get message queue kernel information and do some sanity checks. */ struct msqid_ds msginfo; if (msgctl (msqid, IPC_STAT, &msginfo) == -1) FAIL_EXIT1 ("msgctl with IPC_STAT failed (errno=%d)", errno); if (msginfo.msg_perm.__key != key) FAIL_EXIT1 ("msgid_ds::msg_perm::key (%d) != %d", (int) msginfo.msg_perm.__key, (int) key); if (msginfo.msg_perm.mode != MSGQ_MODE) FAIL_EXIT1 ("msgid_ds::msg_perm::mode (%o) != %o", msginfo.msg_perm.mode, MSGQ_MODE); if (msginfo.msg_qnum != 0) FAIL_EXIT1 ("msgid_ds::msg_qnum (%lu) != 0", (long unsigned) msginfo.msg_qnum); /* Check if last argument (IPC_NOWAIT) is correctly handled. */ struct msgbuf_t msg2rcv = { 0 }; if (msgrcv (msqid, &msg2rcv, sizeof (msg2rcv.buf), MSGTYPE, IPC_NOWAIT) == -1 && errno != ENOMSG) FAIL_EXIT1 ("msgrcv failed (errno=%d)", errno); struct msgbuf_t msg2snd = { MSGTYPE, MSGDATA }; if (msgsnd (msqid, &msg2snd, sizeof (msg2snd.buf), 0) == -1) FAIL_EXIT1 ("msgsnd failed (errno=%d)", errno); if (msgrcv (msqid, &msg2rcv, sizeof (msg2rcv.buf), MSGTYPE, 0) == -1) FAIL_EXIT1 ("msgrcv failed (errno=%d)", errno); int ret = 0; if (strncmp (msg2snd.buf, msg2rcv.buf, TEXTSIZE) != 0) ret = 1; if (msgctl (msqid, IPC_RMID, NULL) == -1) FAIL_EXIT1 ("msgctl failed"); return ret; }
static int do_test (void) { void *handle = dlopen (LIBIDN2_SONAME, RTLD_LAZY); if (handle == NULL) FAIL_UNSUPPORTED ("libidn2 not installed"); if (setlocale (LC_CTYPE, "en_US.ISO-8859-1") == NULL) FAIL_EXIT1 ("setlocale: %m"); struct resolv_test *aux = resolv_test_start ((struct resolv_redirect_config) { .response_callback = response, });
static int do_test (void) { /* It first allocates a open file description lock range which can not be represented in a 32 bit struct flock. */ struct flock64 lck64 = { .l_type = F_WRLCK, .l_whence = SEEK_SET, .l_start = (off64_t)INT32_MAX + 1024, .l_len = 1024, }; int ret = fcntl64 (temp_fd, F_OFD_SETLKW, &lck64); if (ret == -1 && errno == EINVAL) /* OFD locks are only available on Linux 3.15. */ FAIL_UNSUPPORTED ("fcntl (F_OFD_SETLKW) not supported"); TEST_VERIFY_EXIT (ret == 0); /* Open file description locks placed through the same open file description (either by same file descriptor or a duplicated one created by fork, dup, fcntl F_DUPFD, etc.) overwrites then old lock. To force a conflicting lock combination, it creates a new file descriptor. */ int fd = open64 (temp_filename, O_RDWR, 0666); TEST_VERIFY_EXIT (fd != -1); /* It tries then to allocate another open file descriptior with a valid non-LFS bits struct flock but which will result in a conflicted region which can not be represented in a non-LFS struct flock. */ struct flock lck = { .l_type = F_WRLCK, .l_whence = SEEK_SET, .l_start = INT32_MAX - 1024, .l_len = 4 * 1024, }; int r = fcntl (fd, F_OFD_GETLK, &lck); if (sizeof (off_t) != sizeof (off64_t)) TEST_VERIFY (r == -1 && errno == EOVERFLOW); else TEST_VERIFY (r == 0); return 0; }
static int do_test (void) { atexit (remove_shm); key_t key = ftok (name, 'G'); if (key == -1) FAIL_EXIT1 ("ftok failed"); long int pgsz = sysconf (_SC_PAGESIZE); if (pgsz == -1) FAIL_EXIT1 ("sysconf (_SC_PAGESIZE) failed (errno = %d)", errno); shmid = shmget(key, pgsz, IPC_CREAT | IPC_EXCL | SHM_MODE); if (shmid == -1) { if (errno == ENOSYS) FAIL_UNSUPPORTED ("shmget not supported"); FAIL_EXIT1 ("shmget failed (errno=%d)", errno); } /* Get shared memory kernel information and do some sanity checks. */ struct shmid_ds shminfo; if (shmctl (shmid, IPC_STAT, &shminfo) == -1) FAIL_EXIT1 ("shmctl with IPC_STAT failed (errno=%d)", errno); if (shminfo.shm_perm.__key != key) FAIL_EXIT1 ("shmid_ds::shm_perm::key (%d) != %d", (int) shminfo.shm_perm.__key, (int) key); if (shminfo.shm_perm.mode != SHM_MODE) FAIL_EXIT1 ("shmid_ds::shm_perm::mode (%o) != %o", shminfo.shm_perm.mode, SHM_MODE); if (shminfo.shm_segsz != pgsz) FAIL_EXIT1 ("shmid_ds::shm_segsz (%lu) != %lu", (long unsigned) shminfo.shm_segsz, pgsz); /* Attach on shared memory and realize some operations. */ int *shmem = shmat (shmid, NULL, 0); if (shmem == (void*) -1) FAIL_EXIT1 ("shmem failed (errno=%d)", errno); shmem[0] = 0x55555555; shmem[32] = 0x44444444; shmem[64] = 0x33333333; shmem[128] = 0x22222222; if (shmdt (shmem) == -1) FAIL_EXIT1 ("shmem failed (errno=%d)", errno); shmem = shmat (shmid, NULL, SHM_RDONLY); if (shmem == (void*) -1) FAIL_EXIT1 ("shmem failed (errno=%d)", errno); CHECK_EQ (shmem[0], 0x55555555); CHECK_EQ (shmem[32], 0x44444444); CHECK_EQ (shmem[64], 0x33333333); CHECK_EQ (shmem[128], 0x22222222); if (shmdt (shmem) == -1) FAIL_EXIT1 ("shmem failed (errno=%d)", errno); /* Finally free up the semnaphore resource. */ if (shmctl (shmid, IPC_RMID, 0) == -1) FAIL_EXIT1 ("semctl failed (errno=%d)", errno); return 0; }