From 4ebca5a005afbc19c08f663e24d3e76518d12fa8 Mon Sep 17 00:00:00 2001
From: Mohammed Ajmal Siddiqui <ajmalsiddiqui21@gmail.com>
Date: Wed, 5 Oct 2022 12:20:58 +0530
Subject: [PATCH] lxc-attach: Fix lost return codes of spawned processes that
 are killed

lxc-attach swallows the return codes of processes that are terminated
via a signal, and by default exits with a return code of 0 (i.e.
indicating success) even if the command it tried to execute was
terminated.

This patch fixes it by explicitly checking if the process was terminated
via a signal, and returning an appropriate exit code.

Note that we add 128 to the signal value to generate the exit code
because by convention the exit code is 128 + signal number. e.g. if a
process is killed via signal 9, then the error code is 9 + 128 = 137.

Signed-off-by: Mohammed Ajmal Siddiqui <ajmalsiddiqui21@gmail.com>
---
 src/lxc/tools/lxc_attach.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lxc/tools/lxc_attach.c b/src/lxc/tools/lxc_attach.c
index fc0529a..96ed27b 100644
--- a/src/lxc/tools/lxc_attach.c
+++ b/src/lxc/tools/lxc_attach.c
@@ -844,6 +844,8 @@ int main(int argc, char *argv[])
 	}
 	if (WIFEXITED(ret))
 		wexit = WEXITSTATUS(ret);
+	else if (WIFSIGNALED(ret))
+		wexit = WTERMSIG(ret) + 128;
 
 out:
 	lxc_container_put(c);
-- 
2.25.1

