]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/initrd-util.c
Merge pull request #28301 from berrange/cvm-lockdown
[thirdparty/systemd.git] / src / basic / initrd-util.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include <unistd.h>
4
5 #include "env-util.h"
6 #include "errno-util.h"
7 #include "initrd-util.h"
8 #include "parse-util.h"
9 #include "stat-util.h"
10 #include "string-util.h"
11
12 static int saved_in_initrd = -1;
13
14 bool in_initrd(void) {
15 int r;
16
17 if (saved_in_initrd >= 0)
18 return saved_in_initrd;
19
20 /* If /etc/initrd-release exists, we're in an initrd.
21 * This can be overridden by setting SYSTEMD_IN_INITRD=0|1.
22 */
23
24 r = getenv_bool_secure("SYSTEMD_IN_INITRD");
25 if (r < 0 && r != -ENXIO)
26 log_debug_errno(r, "Failed to parse $SYSTEMD_IN_INITRD, ignoring: %m");
27
28 if (r >= 0)
29 saved_in_initrd = r > 0;
30 else {
31 r = RET_NERRNO(access("/etc/initrd-release", F_OK));
32 if (r < 0 && r != -ENOENT)
33 log_debug_errno(r, "Failed to check if /etc/initrd-release exists, assuming it does not: %m");
34 saved_in_initrd = r >= 0;
35 }
36
37 return saved_in_initrd;
38 }
39
40 void in_initrd_force(bool value) {
41 saved_in_initrd = value;
42 }