From b30b0dcb14be6b2fd38c1146b734e876a6e9a8e4 Mon Sep 17 00:00:00 2001 From: Dengguangxing Date: Wed, 19 Jun 2019 09:13:39 +0000 Subject: [PATCH] fix segmentation fault caused by uninitialized mutex Segmentation fault was raised while trying to restore a process with tty. Coredump file says this is caused by uninitialized tty_mutex: (gdb) where #0 0x00000000004d7270 in atomic_add_return (i=1, v=0x0) at include/common/asm/atomic.h:34 #1 0x00000000004d7398 in mutex_lock (m=0x0) at include/common/lock.h:151 #2 0x00000000004d840c in __pty_open_ptmx_index (index=3, flags=2, cb=0x4dce50 , arg=0x11, path=0x5562e0 "ptmx") at criu/tty.c:603 #3 0x00000000004dced8 in pty_create_ptmx_index (dfd=17, index=3, flags=2) at criu/tty.c:2384 since init_tty_mutex() is reentrantable, just calling it before mutex_lock() Signed-off-by: Deng Guangxing Reviewed-by: Cyrill Gorcunov Signed-off-by: Andrei Vagin --- criu/tty.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/criu/tty.c b/criu/tty.c index 6fe11530a..e9a28897c 100644 --- a/criu/tty.c +++ b/criu/tty.c @@ -600,6 +600,9 @@ static int __pty_open_ptmx_index(int index, int flags, memset(fds, 0xff, sizeof(fds)); + if (init_tty_mutex()) + return -1; + mutex_lock(tty_mutex); for (i = 0; i < ARRAY_SIZE(fds); i++) {