From 3067c7503547e7c1f2499a69b1713051515743e0 Mon Sep 17 00:00:00 2001
From: Kir Kolyshkin <kolyshkin@gmail.com>
Date: Wed, 9 Aug 2023 12:04:26 +0900
Subject: [PATCH] libct/init: unify init, fix its error logic

Fix init error handling logic.

The main issues at hand are:
- the "unable to convert _LIBCONTAINER_INITPIPE" error from
  StartInitialization is never shown;
- errors from WriteSync and WriteJSON are never shown;

Generally, our goals are:
 - if there's any error, do our best to show it;
 - but only show each error once;

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
---
 libcontainer/factory_linux.go | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/libcontainer/factory_linux.go b/libcontainer/factory_linux.go
index a1fa7de..86a127c 100644
--- a/libcontainer/factory_linux.go
+++ b/libcontainer/factory_linux.go
@@ -296,13 +296,14 @@ func (l *LinuxFactory) StartInitialization() (err error) {
 		// We have an error during the initialization of the container's init,
 		// send it back to the parent process in the form of an initError.
 		if werr := writeSync(pipe, procError); werr != nil {
-			fmt.Fprintln(os.Stderr, err)
+			fmt.Fprintln(os.Stderr, werr)
 			return
 		}
 		if werr := utils.WriteJSON(pipe, &initError{Message: err.Error()}); werr != nil {
-			fmt.Fprintln(os.Stderr, err)
+			fmt.Fprintln(os.Stderr, werr)
 			return
 		}
+		err = nil
 	}()
 
 	// Only init processes have FIFOFD.
-- 
2.33.0

