summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udev.c16
-rw-r--r--udevd.c26
2 files changed, 32 insertions, 10 deletions
diff --git a/udev.c b/udev.c
index beaa191c04..926c4b526a 100644
--- a/udev.c
+++ b/udev.c
@@ -72,6 +72,7 @@ int main(int argc, char *argv[], char *envp[])
const char *devpath;
const char *subsystem;
struct sigaction act;
+ int devnull;
int retval = -EINVAL;
if (argc == 2 && strcmp(argv[1], "-V") == 0) {
@@ -79,7 +80,22 @@ int main(int argc, char *argv[], char *envp[])
exit(0);
}
+ /* set std fd's to /dev/null, if the kernel forks us, we don't have them at all */
+ devnull = open("/dev/null", O_RDWR);
+ if (devnull >= 0) {
+ if (devnull != STDIN_FILENO)
+ dup2(devnull, STDIN_FILENO);
+ if (devnull != STDOUT_FILENO)
+ dup2(devnull, STDOUT_FILENO);
+ if (devnull != STDERR_FILENO)
+ dup2(devnull, STDERR_FILENO);
+ if (devnull > STDERR_FILENO)
+ close(devnull);
+ }
+
logging_init("udev");
+ if (devnull < 0)
+ err("fatal, could not open /dev/null");
udev_init_config();
dbg("version %s", UDEV_VERSION);
diff --git a/udevd.c b/udevd.c
index 79d3e82550..ffd2b1ff3b 100644
--- a/udevd.c
+++ b/udevd.c
@@ -777,7 +777,23 @@ int main(int argc, char *argv[], char *envp[])
int daemonize = 0;
int i;
+ /* set std fd's to /dev/null, if the kernel forks us, we don't have them at all */
+ devnull = open("/dev/null", O_RDWR);
+ if (devnull >= 0) {
+ if (devnull != STDIN_FILENO)
+ dup2(devnull, STDIN_FILENO);
+ if (devnull != STDOUT_FILENO)
+ dup2(devnull, STDOUT_FILENO);
+ if (devnull != STDERR_FILENO)
+ dup2(devnull, STDERR_FILENO);
+ if (devnull > STDERR_FILENO)
+ close(devnull);
+ }
+
logging_init("udevd");
+ if (devnull < 0)
+ err("fatal, could not open /dev/null");
+
udev_init_config();
dbg("version %s", UDEV_VERSION);
@@ -825,16 +841,6 @@ int main(int argc, char *argv[], char *envp[])
/* set a reasonable scheduling priority for the daemon */
setpriority(PRIO_PROCESS, 0, UDEVD_PRIORITY);
- /* Set fds to dev/null */
- devnull = open( "/dev/null", O_RDWR );
- if (devnull > 0) {
- dup2(devnull, STDIN_FILENO);
- dup2(devnull, STDOUT_FILENO);
- dup2(devnull, STDERR_FILENO);
- close(devnull);
- } else
- err("error opening /dev/null %s", strerror(errno));
-
/* setup signal handler pipe */
retval = pipe(pipefds);
if (retval < 0) {