From d3f2820ff7bc48abe0ec324df436a7c86a61c63e Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Wed, 28 Jun 2017 15:39:51 +0200 Subject: [PATCH] nodedev: udev: Remove the udevEventHandleCallback on fatal error So we have a sanity check for the udev monitor fd. Theoretically, it could happen that the udev monitor fd changes (due to our own wrongdoing, hence the 'sanity' here) and if that happens it means we are handling an event from a different entity than we think, thus we should remove the handle if someone somewhere somehow hits this hypothetical case. Signed-off-by: Erik Skultety --- src/node_device/node_device_udev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index 0944b41d76..a0e425d515 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1611,10 +1611,20 @@ udevEventHandleCallback(int watch ATTRIBUTE_UNUSED, udev_fd = udev_monitor_get_fd(udev_monitor); if (fd != udev_fd) { + udevPrivate *priv = driver->privateData; + virReportError(VIR_ERR_INTERNAL_ERROR, _("File descriptor returned by udev %d does not " "match node device file descriptor %d"), fd, udev_fd); + + /* this is a non-recoverable error, let's remove the handle, so that we + * don't get in here again because of some spurious behaviour and report + * the same error multiple times + */ + virEventRemoveHandle(priv->watch); + priv->watch = -1; + goto cleanup; } -- GitLab