(root)/
strace-6.5/
tests-mx32/
qual_inject-error-signal.c
       1  /*
       2   * Check fault injection along with signal injection.
       3   *
       4   * Copyright (c) 2017-2018 Dmitry V. Levin <ldv@strace.io>
       5   * Copyright (c) 2017-2021 The strace developers.
       6   * All rights reserved.
       7   *
       8   * SPDX-License-Identifier: GPL-2.0-or-later
       9   */
      10  
      11  #include "tests.h"
      12  #include <signal.h>
      13  #include <unistd.h>
      14  #include <sys/stat.h>
      15  #include "scno.h"
      16  
      17  static struct stat before, after;
      18  
      19  static void
      20  handler(int sig)
      21  {
      22  	if (stat(".", &after))
      23  		syscall(__NR_exit_group, 2);
      24  
      25  	if (before.st_dev != after.st_dev || before.st_ino != after.st_ino)
      26  		syscall(__NR_exit_group, 3);
      27  
      28  	syscall(__NR_exit_group, 0);
      29  }
      30  
      31  int
      32  main(void)
      33  {
      34  	const struct sigaction act = { .sa_handler = handler };
      35  	if (sigaction(SIGUSR1, &act, NULL))
      36  		perror_msg_and_fail("sigaction");
      37  
      38  	sigset_t mask;
      39  	sigemptyset(&mask);
      40  	sigaddset(&mask, SIGUSR1);
      41  	if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
      42  		perror_msg_and_fail("sigprocmask");
      43  
      44  	if (stat(".", &before))
      45  		perror_msg_and_fail("stat");
      46  
      47  	syscall(__NR_chdir, ".");
      48  	syscall(__NR_exit_group, 1);
      49  	return 1;
      50  }