[CRIU] [PATCH 1/2] zdtm/lib: don't close bad criu_status_in file descriptor in signal handler

Mike Rapoport rppt at linux.vnet.ibm.com
Wed Jun 6 17:30:57 MSK 2018


The criu_status_in is not always used and it may be -1 when the signal
handler closes it. With lazy-pages we hit a corner case which clobbers the
errno value. This happens when we resume the process inside glibc syscall
wrapper and get the signal before the page containing errno is copied. In
this case, signal handler is invoked before the syscall return value is
written to errno and the actual value of errno seen by the process becomes
-EBADF because of close(-1) in the signal handler.

Let's ensure that close() in signal handler does not fail to make Jenkins
happier while the proper solution for the lazy-pages issue is found.

Signed-off-by: Mike Rapoport <rppt at linux.vnet.ibm.com>
---
 test/zdtm/lib/test.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/test/zdtm/lib/test.c b/test/zdtm/lib/test.c
index 572d160..e0ba44b 100644
--- a/test/zdtm/lib/test.c
+++ b/test/zdtm/lib/test.c
@@ -40,7 +40,8 @@ static void sig_hand(int signo)
 	if (parent)
 		futex_set_and_wake(&test_shared_state->stage, TEST_FAIL_STAGE);
 	futex_set_and_wake(&sig_received, signo);
-	close(criu_status_in);
+	if (criu_status_in >= 0)
+		close(criu_status_in);
 }
 
 static char *outfile;
-- 
2.7.4



More information about the CRIU mailing list