From e8a3b2dcfbd2caa047489b52f7c874833831e5ca Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Wed, 18 Dec 2013 22:30:26 +0100 Subject: [PATCH] libudev: monitor - only disallow "udev" type events --- src/libudev/libudev-monitor.c | 38 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c index 4586b3d4c..7971a8c65 100644 --- a/src/libudev/libudev-monitor.c +++ b/src/libudev/libudev-monitor.c @@ -115,7 +115,7 @@ static bool udev_has_devtmpfs(struct udev *udev) { int r; h = alloca(MAX_HANDLE_SZ); - + h->handle_bytes = MAX_HANDLE_SZ; r = name_to_handle_at(AT_FDCWD, "/dev", h, &mount_id, 0); if (r < 0) return false; @@ -172,27 +172,29 @@ struct udev_monitor *udev_monitor_new_from_netlink_fd(struct udev *udev, const c if (name == NULL) group = UDEV_MONITOR_NONE; - else if (streq(name, "udev")) - group = UDEV_MONITOR_UDEV; - else if (streq(name, "kernel")) + else if (streq(name, "udev")) { + /* + * We do not support subscribing to uevents if no instance of + * udev is running. Uevents would otherwise broadcast the + * processing data of the host into containers, which is not + * desired. + * + * Containers will currently not get any udev uevents, until + * a supporting infrastructure is available. + * + * We do not set a netlink multicast group here, so the socket + * will not receive any messages. + */ + if (!udev_has_service(udev) && !udev_has_devtmpfs(udev)) { + udev_dbg(udev, "the udev service seems not to be active, disable the monitor\n"); + group = UDEV_MONITOR_NONE; + } else + group = UDEV_MONITOR_UDEV; + } else if (streq(name, "kernel")) group = UDEV_MONITOR_KERNEL; else return NULL; - /* - * We do not support subscribing to uevents if no instance of udev - * is running. Uevents would otherwise broadcast the processing data - * of the host into containers, which is not acceptable. Containers - * will currently just not get any uevents. - * - * We clear the netlink multicast group here, so the socket will - * not receive any messages. - */ - if (!udev_has_service(udev) && !udev_has_devtmpfs(udev)) { - udev_dbg(udev, "udev seems not to be active, disable the monitor\n"); - group = 0; - } - udev_monitor = udev_monitor_new(udev); if (udev_monitor == NULL) return NULL; -- 2.30.2