BUG/MINOR: worker: Missing calloc return value check in mworker_env_to_proc_list

A memory allocation failure happening in mworker_env_to_proc_list when
trying to allocate a mworker_proc would have resulted in a crash. This
function is only called during init.

It was raised in GitHub issue #1233.
It could be backported to all stable branches.

(cherry picked from commit 1f4fa906c73e61dba74f9e8b762da12df3052f57)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit d90aa347d2a3a81bae8461c009c9b4d69eb069a5)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/haproxy.c b/src/haproxy.c
index 62da462..2c24b3b 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -1931,8 +1931,10 @@
 	if (global.mode & (MODE_MWORKER|MODE_MWORKER_WAIT)) {
 		struct wordlist *it, *c;
 
-		mworker_env_to_proc_list(); /* get the info of the children in the env */
-
+		/* get the info of the children in the env */
+		if (mworker_env_to_proc_list() < 0) {
+			exit(EXIT_FAILURE);
+		}
 
 		if (!LIST_ISEMPTY(&mworker_cli_conf)) {
 
diff --git a/src/mworker.c b/src/mworker.c
index abdc1d3..39e28b2 100644
--- a/src/mworker.c
+++ b/src/mworker.c
@@ -129,13 +129,13 @@
 /*
  * unserialize the proc list from the environment
  */
-void mworker_env_to_proc_list()
+int mworker_env_to_proc_list()
 {
 	char *msg, *token = NULL, *s1;
 
 	msg = getenv("HAPROXY_PROCESSES");
 	if (!msg)
-		return;
+		return 0;
 
 	while ((token = strtok_r(msg, "|", &s1))) {
 		struct mworker_proc *child;
@@ -145,6 +145,10 @@
 		msg = NULL;
 
 		child = calloc(1, sizeof(*child));
+		if (!child) {
+			ha_alert("Out of memory while trying to allocate a worker process structure.");
+			return -1;
+		}
 
 		while ((subtoken = strtok_r(token, ";", &s2))) {
 
@@ -191,6 +195,8 @@
 	}
 
 	unsetenv("HAPROXY_PROCESSES");
+
+	return 0;
 }
 
 /* Signal blocking and unblocking */