Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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,
     });
Пример #4
0
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;
}
Пример #5
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;
}