chiark / gitweb /
udev: do not selinux label files in /run/udev
[elogind.git] / src / udev / udevd.c
index 162551098ba67f4a26501a2d39fd627506c0cba4..43937db8903a5aa0742717a564098111ce59b9d4 100644 (file)
@@ -99,13 +99,9 @@ struct event {
         int ifindex;
 };
 
         int ifindex;
 };
 
-static struct event *node_to_event(struct udev_list_node *node)
+static inline struct event *node_to_event(struct udev_list_node *node)
 {
 {
-        char *event;
-
-        event = (char *)node;
-        event -= offsetof(struct event, node);
-        return (struct event *)event;
+        return container_of(node, struct event, node);
 }
 
 static void event_queue_cleanup(struct udev *udev, enum event_state type);
 }
 
 static void event_queue_cleanup(struct udev *udev, enum event_state type);
@@ -134,13 +130,9 @@ struct worker_message {
         int exitcode;
 };
 
         int exitcode;
 };
 
-static struct worker *node_to_worker(struct udev_list_node *node)
+static inline struct worker *node_to_worker(struct udev_list_node *node)
 {
 {
-        char *worker;
-
-        worker = (char *)node;
-        worker -= offsetof(struct worker, node);
-        return (struct worker *)worker;
+        return container_of(node, struct worker, node);
 }
 
 static void event_queue_delete(struct event *event, bool export)
 }
 
 static void event_queue_delete(struct event *event, bool export)
@@ -858,7 +850,7 @@ static void static_dev_create_from_modules(struct udev *udev)
                         continue;
 
                 util_strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
                         continue;
 
                 util_strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
-                mkdir_parents(filename, 0755);
+                mkdir_parents_label(filename, 0755);
                 label_context_set(filename, mode);
                 log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min);
                 if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
                 label_context_set(filename, mode);
                 log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min);
                 if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
@@ -1038,6 +1030,7 @@ int main(int argc, char *argv[])
         int fd_ctrl = -1;
         int fd_netlink = -1;
         int fd_worker = -1;
         int fd_ctrl = -1;
         int fd_netlink = -1;
         int fd_worker = -1;
+        const char *prefixes[] = { "/dev", "/run", NULL };
         struct epoll_event ep_ctrl, ep_inotify, ep_signal, ep_netlink, ep_worker;
         struct udev_ctrl_connection *ctrl_conn = NULL;
         int rc = 1;
         struct epoll_event ep_ctrl, ep_inotify, ep_signal, ep_netlink, ep_worker;
         struct udev_ctrl_connection *ctrl_conn = NULL;
         int rc = 1;
@@ -1050,7 +1043,7 @@ int main(int argc, char *argv[])
         log_parse_environment();
         udev_set_log_fn(udev, udev_main_log);
         log_debug("version %s\n", VERSION);
         log_parse_environment();
         udev_set_log_fn(udev, udev_main_log);
         log_debug("version %s\n", VERSION);
-        label_init("/dev");
+        label_init(prefixes);
 
         for (;;) {
                 int option;
 
         for (;;) {
                 int option;
@@ -1255,18 +1248,8 @@ int main(int argc, char *argv[])
 
                 setsid();
 
 
                 setsid();
 
-                fd = open("/proc/self/oom_score_adj", O_RDWR);
-                if (fd < 0) {
-                        /* Fallback to old interface */
-                        fd = open("/proc/self/oom_adj", O_RDWR);
-                        if (fd < 0) {
-                                log_error("error disabling OOM: %m\n");
-                        } else {
-                                /* OOM_DISABLE == -17 */
-                                write(fd, "-17", 3);
-                                close(fd);
-                        }
-                } else {
+                fd = open("/proc/self/oom_score_adj", O_RDWR|O_CLOEXEC);
+                if (fd >= 0) {
                         write(fd, "-1000", 5);
                         close(fd);
                 }
                         write(fd, "-1000", 5);
                         close(fd);
                 }