initd: fix descriptor leak
authorJo-Philipp Wich <jo@mein.io>
Tue, 17 May 2016 15:00:47 +0000 (17:00 +0200)
committerJohn Crispin <john@phrozen.org>
Mon, 16 May 2016 19:00:54 +0000 (21:00 +0200)
Close the descriptor to /tmp/.preinit returned by creat() in order to avoid
an fd leak in the init process.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
initd/preinit.c

index 51fde31a5c351c4745ded5499d1175eb95b81b41..729978ea2f2af790653baaee5ae788f05a88a177 100644 (file)
@@ -89,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");
 
@@ -106,7 +107,13 @@ preinit(void)
        uloop_process_add(&plugd_proc);
 
        setenv("PREINIT", "1", 1);
-       creat("/tmp/.preinit", 0600);
+
+       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();