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

Punit Agrawal punit.agrawal@arm.com
Wed Nov 29 14:25:42 CET 2017


Cyril Hrubis <chrubis@suse.cz> writes:

> 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...

I think that is what I tried initially but for the tst_sig() call in
setup() that installs a default handler and catches the SIGSEGV.

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


More information about the ltp mailing list