init: fix /tmp permissions on zram
[project/procd.git] / initd / preinit.c
index fb94527..729978e 100644 (file)
@@ -15,6 +15,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/mount.h>
+#include <fcntl.h>
 
 #include <libubox/uloop.h>
 #include <libubox/utils.h>
@@ -38,7 +39,8 @@ check_dbglvl(void)
 
        if (!fp)
                return;
-       fscanf(fp, "%d", &lvl);
+       if (fscanf(fp, "%d", &lvl) == EOF)
+               ERROR("failed to read debug level\n");
        fclose(fp);
        unlink("/tmp/debug_level");
 
@@ -63,6 +65,7 @@ spawn_procd(struct uloop_process *proc, int ret)
 
        unsetenv("INITRAMFS");
        unsetenv("PREINIT");
+       unlink("/tmp/.preinit");
        DEBUG(2, "Exec to real procd now\n");
        if (wdt_fd)
                setenv("WDTFD", wdt_fd, 1);
@@ -86,6 +89,7 @@ preinit(void)
 {
        char *init[] = { "/bin/sh", "/etc/preinit", NULL };
        char *plug[] = { "/sbin/procd", "-h", "/etc/hotplug-preinit.json", NULL };
+       int fd;
 
        LOG("- preinit -\n");
 
@@ -104,6 +108,13 @@ preinit(void)
 
        setenv("PREINIT", "1", 1);
 
+       fd = creat("/tmp/.preinit", 0600);
+
+       if (fd < 0)
+               ERROR("Failed to create sentinel file\n");
+       else
+               close(fd);
+
        preinit_proc.cb = spawn_procd;
        preinit_proc.pid = fork();
        if (!preinit_proc.pid) {