From d5b3467056856f6f85b81d0b5f4fb4c67da74642 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Thu, 19 Aug 2021 19:48:09 +0200 Subject: pasta: If a new namespace is created, wait for it to be ready before proceeding Signed-off-by: Stefano Brivio --- passt.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/passt.c b/passt.c index 0f8ac77..73c537a 100644 --- a/passt.c +++ b/passt.c @@ -153,6 +153,18 @@ static void pasta_child_handler(int signal) } } +/** + * pasta_wait_for_ns() - Busy loop until we can enter the target namespace + * @target_pid: PID of process associated with target namespace + * + * Return: 0 + */ +static int pasta_wait_for_ns(void *target_pid) +{ + while (ns_enter(*(int *)target_pid)); + return 0; +} + /** * pasta_start_ns() - Fork shell in new namespace if target PID is not given * @c: Execution context @@ -178,8 +190,10 @@ static void pasta_start_ns(struct ctx *c) exit(EXIT_FAILURE); } - if ((pasta_child_pid = c->pasta_pid)) + if ((pasta_child_pid = c->pasta_pid)) { + NS_CALL(pasta_wait_for_ns, &pasta_child_pid); return; + } if (unshare(CLONE_NEWNET | CLONE_NEWUSER)) { perror("unshare"); -- cgit v1.2.3