chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sd-journal: check if the pointers passed are the same
[elogind.git]
/
src
/
core
/
main.c
diff --git
a/src/core/main.c
b/src/core/main.c
index 695e232514bca043a5b4072620474fe0b7331159..7fc06bea05480e5b51d6d5fc6f472dc9e763720f 100644
(file)
--- a/
src/core/main.c
+++ b/
src/core/main.c
@@
-69,6
+69,7
@@
#include "ima-setup.h"
#include "fileio.h"
#include "smack-setup.h"
#include "ima-setup.h"
#include "fileio.h"
#include "smack-setup.h"
+#include "efivars.h"
static enum {
ACTION_RUN,
static enum {
ACTION_RUN,
@@
-667,7
+668,7
@@
static int parse_config_file(void) {
const char *fn;
int r;
const char *fn;
int r;
- fn = arg_running_as == SYSTEMD_SYSTEM ?
SYSTEM_CONFIG_FILE : USER_CONFIG_FILE
;
+ fn = arg_running_as == SYSTEMD_SYSTEM ?
PKGSYSCONFDIR "/system.conf" : PKGSYSCONFDIR "/user.conf"
;
f = fopen(fn, "re");
if (!f) {
if (errno == ENOENT)
f = fopen(fn, "re");
if (!f) {
if (errno == ENOENT)
@@
-1236,6
+1237,10
@@
int main(int argc, char *argv[]) {
bool reexecute = false;
const char *shutdown_verb = NULL;
dual_timestamp initrd_timestamp = { 0ULL, 0ULL };
bool reexecute = false;
const char *shutdown_verb = NULL;
dual_timestamp initrd_timestamp = { 0ULL, 0ULL };
+ dual_timestamp userspace_timestamp = { 0ULL, 0ULL };
+ dual_timestamp kernel_timestamp = { 0ULL, 0ULL };
+ dual_timestamp firmware_timestamp = { 0ULL, 0ULL };
+ dual_timestamp loader_timestamp = { 0ULL, 0ULL };
static char systemd[] = "systemd";
bool skip_setup = false;
int j;
static char systemd[] = "systemd";
bool skip_setup = false;
int j;
@@
-1257,6
+1262,9
@@
int main(int argc, char *argv[]) {
}
#endif
}
#endif
+ dual_timestamp_from_monotonic(&kernel_timestamp, 0);
+ dual_timestamp_get(&userspace_timestamp);
+
/* Determine if this is a reexecution or normal bootup. We do
* the full command line parsing much later, so let's just
* have a quick peek here. */
/* Determine if this is a reexecution or normal bootup. We do
* the full command line parsing much later, so let's just
* have a quick peek here. */
@@
-1281,7
+1289,9
@@
int main(int argc, char *argv[]) {
log_show_color(isatty(STDERR_FILENO) > 0);
if (getpid() == 1 && detect_container(NULL) <= 0) {
log_show_color(isatty(STDERR_FILENO) > 0);
if (getpid() == 1 && detect_container(NULL) <= 0) {
-
+#ifdef ENABLE_EFI
+ efi_get_boot_timestamps(&userspace_timestamp, &firmware_timestamp, &loader_timestamp);
+#endif
/* Running outside of a container as PID 1 */
arg_running_as = SYSTEMD_SYSTEM;
make_null_stdio();
/* Running outside of a container as PID 1 */
arg_running_as = SYSTEMD_SYSTEM;
make_null_stdio();
@@
-1291,7
+1301,7
@@
int main(int argc, char *argv[]) {
if (in_initrd()) {
char *rd_timestamp = NULL;
if (in_initrd()) {
char *rd_timestamp = NULL;
-
dual_timestamp_get(&initrd_timestamp)
;
+
initrd_timestamp = userspace_timestamp
;
asprintf(&rd_timestamp, "%llu %llu",
(unsigned long long) initrd_timestamp.realtime,
(unsigned long long) initrd_timestamp.monotonic);
asprintf(&rd_timestamp, "%llu %llu",
(unsigned long long) initrd_timestamp.realtime,
(unsigned long long) initrd_timestamp.monotonic);
@@
-1351,7
+1361,6
@@
int main(int argc, char *argv[]) {
log_set_target(LOG_TARGET_JOURNAL_OR_KMSG);
} else if (getpid() == 1) {
log_set_target(LOG_TARGET_JOURNAL_OR_KMSG);
} else if (getpid() == 1) {
-
/* Running inside a container, as PID 1 */
arg_running_as = SYSTEMD_SYSTEM;
log_set_target(LOG_TARGET_CONSOLE);
/* Running inside a container, as PID 1 */
arg_running_as = SYSTEMD_SYSTEM;
log_set_target(LOG_TARGET_CONSOLE);
@@
-1360,12
+1369,21
@@
int main(int argc, char *argv[]) {
/* For the later on, see above... */
log_set_target(LOG_TARGET_JOURNAL);
/* For the later on, see above... */
log_set_target(LOG_TARGET_JOURNAL);
- } else {
+ /* clear the kernel timestamp,
+ * because we are in a container */
+ kernel_timestamp.monotonic = 0ULL;
+ kernel_timestamp.realtime = 0ULL;
+ } else {
/* Running as user instance */
arg_running_as = SYSTEMD_USER;
log_set_target(LOG_TARGET_AUTO);
log_open();
/* Running as user instance */
arg_running_as = SYSTEMD_USER;
log_set_target(LOG_TARGET_AUTO);
log_open();
+
+ /* clear the kernel timestamp,
+ * because we are not PID 1 */
+ kernel_timestamp.monotonic = 0ULL;
+ kernel_timestamp.realtime = 0ULL;
}
/* Initialize default unit */
}
/* Initialize default unit */
@@
-1607,12
+1625,14
@@
int main(int argc, char *argv[]) {
m->default_std_error = arg_default_std_error;
m->runtime_watchdog = arg_runtime_watchdog;
m->shutdown_watchdog = arg_shutdown_watchdog;
m->default_std_error = arg_default_std_error;
m->runtime_watchdog = arg_runtime_watchdog;
m->shutdown_watchdog = arg_shutdown_watchdog;
+ m->userspace_timestamp = userspace_timestamp;
+ m->kernel_timestamp = kernel_timestamp;
+ m->firmware_timestamp = firmware_timestamp;
+ m->loader_timestamp = loader_timestamp;
+ m->initrd_timestamp = initrd_timestamp;
manager_set_default_rlimits(m, arg_default_rlimit);
manager_set_default_rlimits(m, arg_default_rlimit);
- if (dual_timestamp_is_set(&initrd_timestamp))
- m->initrd_timestamp = initrd_timestamp;
-
if (arg_default_controllers)
manager_set_default_controllers(m, arg_default_controllers);
if (arg_default_controllers)
manager_set_default_controllers(m, arg_default_controllers);