diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2012-05-30 16:13:48 -0400 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-05-31 01:43:27 +0200 |
commit | 9b5af248f04b6cad8a5bca836e89a39e9f6823d9 (patch) | |
tree | 5a8cf8c7b022c922c41028896065038a398332c6 | |
parent | 96ceff5645faeaf02438d78996b8bdba4ebf05bb (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.c | 6 | ||||
-rw-r--r-- | src/shared/label.h | 2 | ||||
-rw-r--r-- | src/test/test-udev.c | 3 | ||||
-rw-r--r-- | src/udev/udevadm.c | 4 | ||||
-rw-r--r-- | src/udev/udevd.c | 3 |
5 files changed, 11 insertions, 7 deletions
diff --git a/src/shared/label.c b/src/shared/label.c index e13eba6550..3e5ea67469 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 3f880e363a..90b49ffbe0 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 64bb5cbc3b..551f7564f1 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 5217d7f9dd..fafa31bba4 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 0d85960e63..f6707a5ccb 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; |