summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel J Walsh <dwalsh@redhat.com>2012-05-30 16:13:48 -0400
committerLennart Poettering <lennart@poettering.net>2012-05-31 01:43:27 +0200
commit9b5af248f04b6cad8a5bca836e89a39e9f6823d9 (patch)
tree5a8cf8c7b022c922c41028896065038a398332c6
parent96ceff5645faeaf02438d78996b8bdba4ebf05bb (diff)
label: fix systemd-udev labeling of /run directory.
systemd-udev is currently incorrectly labeling /run/udev/* content because it is using selinux prefix labeling of /dev. This patch will allow systemd-udev to use prefix labeling of /dev and /run.
-rw-r--r--src/shared/label.c6
-rw-r--r--src/shared/label.h2
-rw-r--r--src/test/test-udev.c3
-rw-r--r--src/udev/udevadm.c4
-rw-r--r--src/udev/udevd.c3
5 files changed, 11 insertions, 7 deletions
diff --git a/src/shared/label.c b/src/shared/label.c
index e13eba655..3e5ea6746 100644
--- a/src/shared/label.c
+++ b/src/shared/label.c
@@ -52,7 +52,7 @@ void label_retest_selinux(void) {
#endif
-int label_init(const char *prefix) {
+int label_init(const char *prefixes[]) {
int r = 0;
#ifdef HAVE_SELINUX
@@ -68,9 +68,9 @@ int label_init(const char *prefix) {
before_mallinfo = mallinfo();
before_timestamp = now(CLOCK_MONOTONIC);
- if (prefix) {
+ if (prefixes) {
struct selinux_opt options[] = {
- { .type = SELABEL_OPT_SUBSET, .value = prefix },
+ { .type = SELABEL_OPT_SUBSET, .values = prefixes },
};
label_hnd = selabel_open(SELABEL_CTX_FILE, options, ELEMENTSOF(options));
diff --git a/src/shared/label.h b/src/shared/label.h
index 3f880e363..90b49ffbe 100644
--- a/src/shared/label.h
+++ b/src/shared/label.h
@@ -26,7 +26,7 @@
#include <stdbool.h>
#include <sys/socket.h>
-int label_init(const char *prefix);
+int label_init(const char *prefixes[]);
void label_finish(void);
int label_fix(const char *path, bool ignore_enoent);
diff --git a/src/test/test-udev.c b/src/test/test-udev.c
index 64bb5cbc3..551f7564f 100644
--- a/src/test/test-udev.c
+++ b/src/test/test-udev.c
@@ -45,12 +45,13 @@ int main(int argc, char *argv[])
const char *action;
sigset_t mask, sigmask_orig;
int err = -EINVAL;
+ const char *prefixes[] = { "/dev", "/run", NULL };
udev = udev_new();
if (udev == NULL)
exit(EXIT_FAILURE);
log_debug("version %s\n", VERSION);
- label_init("/dev");
+ label_init(prefixes);
sigprocmask(SIG_SETMASK, NULL, &sigmask_orig);
diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
index 5217d7f9d..fafa31bba 100644
--- a/src/udev/udevadm.c
+++ b/src/udev/udevadm.c
@@ -91,6 +91,7 @@ int main(int argc, char *argv[])
{ "version", no_argument, NULL, 'V' },
{}
};
+ const char *prefixes[] = { "/dev", "/run", NULL };
const char *command;
unsigned int i;
int rc = 1;
@@ -102,7 +103,8 @@ int main(int argc, char *argv[])
log_open();
log_parse_environment();
udev_set_log_fn(udev, udev_main_log);
- label_init("/dev");
+
+ label_init(prefixes);
for (;;) {
int option;
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 0d85960e6..f6707a5cc 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1030,6 +1030,7 @@ int main(int argc, char *argv[])
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;
@@ -1042,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);
- label_init("/dev");
+ label_init(prefixes);
for (;;) {
int option;