Skip to content

Commit 860dafd

Browse files
avaginxemul
authored andcommitted
zdtm/ptrace_sig: don't print from signal handlers
It can be dead-lokced: #0 0x00007fafbf49f6ac in __lll_lock_wait_private () from /lib64/libc.so.6 #1 0x00007fafbf44af1c in _L_lock_2460 () from /lib64/libc.so.6 #2 0x00007fafbf44ad57 in __tz_convert () from /lib64/libc.so.6 #3 0x00000000004022e2 in test_msg (format=0x404508 "Receive signal %d\n") at msg.c:51 #4 <signal handler called> #5 0x00007fafbf3f2483 in __GI__IO_vfscanf () from /lib64/libc.so.6 #6 0x00007fafbf408f27 in vsscanf () from /lib64/libc.so.6 #7 0x00007fafbf4032f7 in sscanf () from /lib64/libc.so.6 #8 0x00007fafbf449ba6 in __tzset_parse_tz () from /lib64/libc.so.6 #9 0x00007fafbf44c4cb in __tzfile_compute () from /lib64/libc.so.6 #10 0x00007fafbf44ae17 in __tz_convert () from /lib64/libc.so.6 #11 0x00000000004022e2 in test_msg (format=format@entry=0x40458c "PASS\n") at msg.c:51 #12 0x0000000000401ceb in main (argc=<optimized out>, argv=<optimized out>) at ptrace_sig.c:172 Signed-off-by: Andrey Vagin <[email protected]> Signed-off-by: Andrew Vagin <[email protected]> Tested-by: Cyrill Gorcunov <[email protected]> Signed-off-by: Pavel Emelyanov <[email protected]>
1 parent 85da772 commit 860dafd

File tree

2 files changed

+8
-21
lines changed

2 files changed

+8
-21
lines changed

test/zdtm/static/ptrace_sig.c

+7-20
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ void sig_handler(int signo, siginfo_t *siginfo, void *data)
2525
child_exit = 1;
2626
}
2727

28-
void sig_chld_handler(int signo)
29-
{
30-
test_msg("Receive signal %d\n", signo);
31-
}
32-
3328
int child(int fd)
3429
{
3530
int ret = 0;
@@ -64,7 +59,6 @@ int main(int argc, char ** argv)
6459
{
6560
int ret, status = 0;
6661
pid_t pid, spid, cpid;
67-
sighandler_t sh;
6862
int signal_pipe[2];
6963
int child_pipe[2];
7064

@@ -113,12 +107,6 @@ int main(int argc, char ** argv)
113107
}
114108
close(signal_pipe[0]);
115109

116-
sh = signal(SIGCHLD, sig_chld_handler);
117-
if (sh == SIG_ERR) {
118-
pr_perror("signal failed");
119-
return 1;
120-
}
121-
122110
test_msg("wait while child initialized");
123111
ret = read(child_pipe[0], &status, sizeof(status));
124112
if (ret != sizeof(status)) {
@@ -166,24 +154,23 @@ int main(int argc, char ** argv)
166154
return 1;
167155
}
168156

169-
if (spid != siginfo.si_pid)
157+
if (spid != siginfo.si_pid) {
170158
fail("%d!=%d", cpid, siginfo.si_pid);
171-
else if (status == siginfo.si_pid)
172-
pass();
173-
else {
159+
return 1;
160+
} else if (status != siginfo.si_pid) {
174161
fail("%d!=%d", status, siginfo.si_pid);
175162
return 1;
176163
}
177-
}
178-
if (WIFEXITED(status)) {
164+
} else if (WIFEXITED(status)) {
179165
test_msg("pid = %d status = %d\n", pid, WEXITSTATUS(status));
180166
if (WEXITSTATUS(status))
181167
return 1;
182-
}
183-
if (WIFSTOPPED(status)) {
168+
} else if (WIFSIGNALED(status)) {
184169
test_msg("pid = %d signal = %d\n", pid, WTERMSIG(status));
185170
return 1;
186171
}
187172
}
173+
174+
pass();
188175
return 0;
189176
}

test/zdtm/static/ptrace_sig.desc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{'flags': 'noauto'}
1+
{'flags': 'crfail'}

0 commit comments

Comments
 (0)