[libcamera-devel] [PATCH v2] libcamera: v4l2_device: openat(2) with O_CLOEXEC to cleanup after exec(3)
Elias Naur
mail at eliasnaur.com
Sun Mar 12 22:22:05 CET 2023
It's generally a good idea to openat(2) with O_CLOEXEC, but this patch
also fixes a real (corner-)case: I have an excutable that (1) uses
v4l2-compat to drive a RPi camera, (2) self-updates through exec(3).
Without O_CLOEXEC of the kernel devices, an update while the
camera is opened will result in -EBUSY errors when the update tries to
open the camera.
Signed-off-by: Elias Naur <mail at eliasnaur.com>
---
This update fixes a style issue raised through review and clarifies the
motivatition for the fix.
src/libcamera/v4l2_device.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git src/libcamera/v4l2_device.cpp src/libcamera/v4l2_device.cpp
index 57a88d96..9eb26839 100644
--- src/libcamera/v4l2_device.cpp
+++ src/libcamera/v4l2_device.cpp
@@ -86,7 +86,7 @@ int V4L2Device::open(unsigned int flags)
return -EBUSY;
}
- UniqueFD fd(syscall(SYS_openat, AT_FDCWD, deviceNode_.c_str(), flags));
+ UniqueFD fd(syscall(SYS_openat, AT_FDCWD, deviceNode_.c_str(), flags | O_CLOEXEC));
if (!fd.isValid()) {
int ret = -errno;
LOG(V4L2, Error) << "Failed to open V4L2 device '"
--
2.39.2
More information about the libcamera-devel
mailing list