mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
util: add extra safety check to in_initrd()
initrds can only be on tmpfs or ramfs, so check for that
This commit is contained in:
parent
36fcd77e02
commit
825c6fe5eb
12
TODO
12
TODO
@ -20,6 +20,18 @@ Bugfixes:
|
||||
* we pull src/core/manager.h into src/shared/src/shared/path-lookup.c which is the wrong direction
|
||||
rename enum "ManagerRunningAs" to "SystemdRunningAs" and move it to shared/
|
||||
|
||||
* crash happens when running a service as forking and then changing it to simple and reloading.
|
||||
|
||||
Jul 09 18:20:57 mop systemd[1]: usbmuxd.service operation timed out. Terminating.
|
||||
Jul 09 18:20:57 mop systemd[1]: Unit usbmuxd.service entered failed state.
|
||||
Jul 09 18:22:24 mop systemd[1]: PID 21814 read from file /var/run/usbmuxd.pid does not exist.
|
||||
Jul 09 18:22:24 mop systemd[1]: Unit usbmuxd.service entered failed state.
|
||||
Jul 09 18:22:33 mop systemd[1]: Reloading.
|
||||
Jul 09 18:22:37 mop systemd[1]: Assertion 's->type == SERVICE_FORKING' failed at src/core/service.c:3007, function service_sigchld_eve...Aborting.
|
||||
Jul 09 18:22:37 mop systemd[1]: Caught <ABRT>, dumped core as pid 21865.
|
||||
Jul 09 18:22:37 mop systemd[1]: Freezing execution.
|
||||
Jul 09 18:22:37 mop [21866]: Process 21865 (systemd) dumped core.
|
||||
|
||||
Features:
|
||||
|
||||
* switch-root add extra safety check
|
||||
|
@ -54,6 +54,8 @@
|
||||
#include <glob.h>
|
||||
#include <grp.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/vfs.h>
|
||||
#include <linux/magic.h>
|
||||
|
||||
#include "macro.h"
|
||||
#include "util.h"
|
||||
@ -5738,9 +5740,24 @@ bool is_valid_documentation_url(const char *url) {
|
||||
|
||||
bool in_initrd(void) {
|
||||
static int saved = -1;
|
||||
struct statfs s;
|
||||
|
||||
if (saved < 0)
|
||||
saved = access("/etc/initrd-release", F_OK) >= 0;
|
||||
if (saved >= 0)
|
||||
return saved;
|
||||
|
||||
/* We make two checks here:
|
||||
*
|
||||
* 1. the flag file /etc/initrd-release must exist
|
||||
* 2. the root file system must be a memory file system
|
||||
*
|
||||
* The second check is extra paranoia, since misdetecting an
|
||||
* initrd can have bad bad consequences due the initrd
|
||||
* emptying when transititioning to the main systemd.
|
||||
*/
|
||||
|
||||
saved = access("/etc/initrd-release", F_OK) >= 0 &&
|
||||
statfs("/", &s) >= 0 &&
|
||||
(s.f_type == TMPFS_MAGIC || s.f_type == RAMFS_MAGIC);
|
||||
|
||||
return saved;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user