udevd: set umask before creating files/directories

This commit is contained in:
Kay Sievers
2010-05-30 23:42:47 +02:00
parent a07c29ca19
commit 1182b9470f
+24 -22
View File
@@ -1033,12 +1033,6 @@ int main(int argc, char *argv[])
}
}
if (getuid() != 0) {
fprintf(stderr, "root privileges required\n");
err(udev, "root privileges required\n");
goto exit;
}
/*
* read the kernel commandline, in case we need to get into debug mode
* udev.log-priority=<level> syslog priority
@@ -1073,7 +1067,17 @@ int main(int argc, char *argv[])
fclose(f);
}
/* make sure std{in,out,err} fds are in a sane state */
if (getuid() != 0) {
fprintf(stderr, "root privileges required\n");
err(udev, "root privileges required\n");
goto exit;
}
/* set umask before creating any file/directory */
chdir("/");
umask(022);
/* before opening new files, make sure std{in,out,err} fds are in a sane state */
fd = open("/dev/null", O_RDWR);
if (fd < 0) {
fprintf(stderr, "cannot open /dev/null\n");
@@ -1174,6 +1178,14 @@ int main(int argc, char *argv[])
goto exit;
}
if (!debug) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
}
if (fd > STDERR_FILENO)
close(fd);
if (daemonize) {
pid_t pid;
@@ -1191,27 +1203,17 @@ int main(int argc, char *argv[])
}
}
/* set scheduling priority for the main daemon process */
setpriority(PRIO_PROCESS, 0, UDEVD_PRIORITY);
setsid();
f = fopen("/dev/kmsg", "w");
if (f != NULL) {
fprintf(f, "<6>udev: starting version " VERSION "\n");
fclose(f);
}
if (!debug) {
dup2(fd, STDIN_FILENO);
dup2(fd, STDOUT_FILENO);
dup2(fd, STDERR_FILENO);
}
if (fd > STDERR_FILENO)
close(fd);
/* set scheduling priority for the main daemon process */
setpriority(PRIO_PROCESS, 0, UDEVD_PRIORITY);
chdir("/");
umask(022);
setsid();
/* OOM_DISABLE == -17 */
fd = open("/proc/self/oom_adj", O_RDWR);
if (fd < 0) {