libcamera: udev: Catch udev notification errors
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@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -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 err = errno;
|
||||
LOG(DeviceEnumerator, Warning)
|
||||
<< "Ignoring notfication received without a device: "
|
||||
<< strerror(err);
|
||||
return;
|
||||
}
|
||||
|
||||
std::string_view action(udev_device_get_action(dev));
|
||||
std::string_view deviceNode(udev_device_get_devnode(dev));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user