[CRIU] [PATCH] tty: Make sure the controlling terminal is restored by session leader

Cyrill Gorcunov gorcunov at openvz.org
Tue Nov 20 09:09:17 EST 2012


The controling terminal should be sestored by a session leader,
thus we need to test if the SID we've found in process tree
is a leader.

Otherwise we might have pretty interesting situation: the user
passed -j on dump, ie telling us to inherit shell jobs and on
restore procedure the SID get inherited from the crtools but
session leader for this sid doesn't belong to our peocess tree
and thus we should not try to restore controlling terminal
but inherit it as well.

Reported-by: Andrey Vagin <avagin at openvz.org>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 tty.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/tty.c b/tty.c
index ba8a6c1..1ecb0e5 100644
--- a/tty.c
+++ b/tty.c
@@ -733,8 +733,13 @@ static int tty_find_restoring_task(struct tty_info *info)
 				return 0;
 		}
 
+		/*
+		 * Find out the task which is session leader
+		 * and it can restore the controlling terminal
+		 * for us.
+		 */
 		item = find_first_sid(info->tie->sid);
-		if (item) {
+		if (item && item->pid.virt == item->sid) {
 			pr_info("Set a control terminal %x to %d\n",
 				info->tfe->id, info->tie->sid);
 			return prepare_ctl_tty(item->pid.virt,
-- 
1.7.7.6



More information about the CRIU mailing list