pid1: rework environment block copy logic

This reworks the logic introduced in
a5cede8c24 (#13693).

First of all, let's move this out of util.c, since only PID 1 really
needs this, and there's no real need to have it in util.c.

Then, fix freeing of the variable. It previously relied on
STATIC_DESTRUCTOR_REGISTER() which however relies on static_destruct()
to be called explicitly. Currently only the main-func.h macros do that,
and PID 1 does not. (It might be worth investigating whether to do that,
but it's not trivial.) Hence the freeing wasn't applied.

Finally, an OOM check was missing, add it in.
This commit is contained in:
Lennart Poettering
2019-11-01 11:30:59 +01:00
parent 6878c02245
commit 0e06a03165
3 changed files with 23 additions and 14 deletions
-8
View File
@@ -38,7 +38,6 @@
#include "set.h"
#include "signal-util.h"
#include "stat-util.h"
#include "static-destruct.h"
#include "string-util.h"
#include "strv.h"
#include "time-util.h"
@@ -49,11 +48,8 @@
int saved_argc = 0;
char **saved_argv = NULL;
char **saved_env = NULL;
static int saved_in_initrd = -1;
STATIC_DESTRUCTOR_REGISTER(saved_env, strv_freep);
bool kexec_loaded(void) {
_cleanup_free_ char *s = NULL;
@@ -301,7 +297,3 @@ void disable_coredumps(void) {
if (r < 0)
log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m");
}
void save_env(void) {
saved_env = strv_copy(environ);
}