From 3b49d09a3d34ac462573aa96d66c70e9a60417e4 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Tue, 17 Apr 2012 02:20:32 +0200 Subject: [PATCH] udev: kill udev_selinux_setfscreateconat() --- src/libudev/libudev-private.h | 2 -- src/libudev/libudev-selinux-private.c | 25 ------------------------- src/udev/udevd.c | 23 ++++++++--------------- 3 files changed, 8 insertions(+), 42 deletions(-) diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h index 953f589bf..4bdbb0aa2 100644 --- a/src/libudev/libudev-private.h +++ b/src/libudev/libudev-private.h @@ -180,14 +180,12 @@ static inline void udev_selinux_init(struct udev *udev) {} static inline void udev_selinux_exit(struct udev *udev) {} static inline void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode) {} static inline void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode) {} -static inline void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode) {} static inline void udev_selinux_resetfscreatecon(struct udev *udev) {} #else void udev_selinux_init(struct udev *udev); void udev_selinux_exit(struct udev *udev); void udev_selinux_lsetfilecon(struct udev *udev, const char *file, unsigned int mode); void udev_selinux_setfscreatecon(struct udev *udev, const char *file, unsigned int mode); -void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode); void udev_selinux_resetfscreatecon(struct udev *udev); #endif diff --git a/src/libudev/libudev-selinux-private.c b/src/libudev/libudev-selinux-private.c index e9e65ad41..03ca168b0 100644 --- a/src/libudev/libudev-selinux-private.c +++ b/src/libudev/libudev-selinux-private.c @@ -82,28 +82,3 @@ void udev_selinux_resetfscreatecon(struct udev *udev) if (setfscreatecon(selinux_prev_scontext) < 0) err(udev, "setfscreatecon failed: %m\n"); } - -void udev_selinux_setfscreateconat(struct udev *udev, int dfd, const char *file, unsigned int mode) -{ - char filename[UTIL_PATH_SIZE]; - - if (!selinux_enabled) - return; - - /* resolve relative filename */ - if (file[0] != '/') { - char procfd[UTIL_PATH_SIZE]; - char target[UTIL_PATH_SIZE]; - ssize_t len; - - snprintf(procfd, sizeof(procfd), "/proc/%u/fd/%u", getpid(), dfd); - len = readlink(procfd, target, sizeof(target)); - if (len <= 0 || len == sizeof(target)) - return; - target[len] = '\0'; - - util_strscpyl(filename, sizeof(filename), target, "/", file, NULL); - file = filename; - } - udev_selinux_setfscreatecon(udev, file, mode); -} diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 513d1de34..20de5cfc2 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -871,36 +871,29 @@ static void static_dev_create_from_modules(struct udev *udev) /* needed for standalone udev operations */ static void static_dev_create_links(struct udev *udev) { - DIR *dir; struct stdlinks { const char *link; const char *target; }; static const struct stdlinks stdlinks[] = { - { "core", "/proc/kcore" }, - { "fd", "/proc/self/fd" }, - { "stdin", "/proc/self/fd/0" }, - { "stdout", "/proc/self/fd/1" }, - { "stderr", "/proc/self/fd/2" }, + { "/dev/core", "/proc/kcore" }, + { "/dev/fd", "/proc/self/fd" }, + { "/dev/stdin", "/proc/self/fd/0" }, + { "/dev/stdout", "/proc/self/fd/1" }, + { "/dev/stderr", "/proc/self/fd/2" }, }; unsigned int i; - dir = opendir("/dev"); - if (dir == NULL) - return; - for (i = 0; i < ELEMENTSOF(stdlinks); i++) { struct stat sb; if (stat(stdlinks[i].target, &sb) == 0) { - udev_selinux_setfscreateconat(udev, dirfd(dir), stdlinks[i].link, S_IFLNK); - if (symlinkat(stdlinks[i].target, dirfd(dir), stdlinks[i].link) < 0 && errno == EEXIST) - utimensat(dirfd(dir), stdlinks[i].link, NULL, AT_SYMLINK_NOFOLLOW); + udev_selinux_setfscreatecon(udev, stdlinks[i].link, S_IFLNK); + if (symlink(stdlinks[i].target, stdlinks[i].link) < 0 && errno == EEXIST) + utimensat(AT_FDCWD, stdlinks[i].link, NULL, AT_SYMLINK_NOFOLLOW); udev_selinux_resetfscreatecon(udev); } } - - closedir(dir); } static int mem_size_mb(void) -- 2.30.2