[PATCH v2] libcamera: udev: Catch udev notification errors
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Aug 7 15:49:50 CEST 2024
The udev_monitor_receive_device() can return NULL on an error as
detailed in the man pages for the function.
The udevNotify() handler in the DeviceEnumeratorUdev directly uses the
return value of udev_monitor_receive_device() in successive calls to
process the event without having first checked the udev_device.
Ensure we identify, and handle events where the udev_device can not be
returned successfully.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=230
Reviewed-by: Stefan Klug <stefan.klug at ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
v2:
- Report strerror based on errno from the udev_monitor_receive_device()
call.
src/libcamera/device_enumerator_udev.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp
index 01c70b6daa82..53eeb772d900 100644
--- a/src/libcamera/device_enumerator_udev.cpp
+++ b/src/libcamera/device_enumerator_udev.cpp
@@ -332,6 +332,14 @@ int DeviceEnumeratorUdev::addV4L2Device(dev_t devnum)
void DeviceEnumeratorUdev::udevNotify()
{
struct udev_device *dev = udev_monitor_receive_device(monitor_);
+ if (!dev) {
+ int error = errno;
+ LOG(DeviceEnumerator, Warning)
+ << "Ignoring notfication received without a device: "
+ << strerror(error);
+ return;
+ }
+
std::string_view action(udev_device_get_action(dev));
std::string_view deviceNode(udev_device_get_devnode(dev));
--
2.34.1
More information about the libcamera-devel
mailing list