[LTP] [PATCH v2 08/13] sigwaitinfo01: catch SEGV and report success for bad_address2 testcase

Cyril Hrubis chrubis@suse.cz
Wed Nov 29 11:29:59 CET 2017


Hi!
>  void test_bad_address2(swi_func sigwaitinfo, int signo)
>  {
> -	TEST(sigwaitinfo((void *)1, NULL, NULL));
> -	REPORT_SUCCESS(-1, EFAULT);
> +	pid_t pid;
> +	int status;
> +
> +	switch (pid = FORK_OR_VFORK()) {
> +	case -1:
> +		tst_brkm(TBROK | TERRNO, NULL, "fork() failed");
> +	case 0:
> +		signal(SIGSEGV, segv_handler);
> +		TEST(sigwaitinfo((void *)1, NULL, NULL));
> +
> +		_exit(0);
> +		break;
> +	default:
> +		break;
> +	}
> +
> +	SUCCEED_OR_DIE(waitpid, "waitpid failed", pid, &status, 0);
> +	if (WIFEXITED(status) && WEXITSTATUS(status) == 0xff)
> +		tst_resm(TPASS, "Test passed");

Why don't we just check for WIFSIGNALED() and WTERMSIG() instead?

We do not have to install any handler that way...

> +	else
> +		tst_resm(TFAIL, "Unrecognised child exit code");
>  }
>  
>  void test_bad_address3(swi_func sigwaitinfo, int signo)
> -- 
> 2.14.2
> 

-- 
Cyril Hrubis
chrubis@suse.cz


More information about the ltp mailing list