[libcamera-devel] [PATCH] libcamera: Add missing O_CLOEXEC flag
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri May 5 10:50:37 CEST 2023
Hi Elias,
I would set the $SUBJECT as :
libcamera: v4l2_videodevice: Use O_CLOEXEC when exporting DMA buffers
Quoting Elias Naur via libcamera-devel (2023-05-02 00:47:34)
> Missed in commit 436b38fd89fe4324d2342084ef477a7a8809a001.
It's still good to explain why and what the commit is doing.
We can replicate most of the message from 436b38fd89fe:
I'll propose this:
"""
Files opened internally in libcamera without the O_CLOEXEC file will
remain open upon a call to one of the exec(3) functions. As exec()
doesn't destroy local or global objects, this can lead to various side
effects. Avoid this by opening file descriptors with O_CLOEXEC for all
internal files.
The O_CLOEXEC flag should also be set when obtaining file handles from
the V4L2 VIDIOC_EXPBUF operation, but was missed during the updates to
both d942bdc913c5 ("libcamera: v4l2_device: openat(2) with O_CLOEXEC to
cleanup after exec(3)") and 436b38fd89fe ("libcamera: Open files with
O_CLOEXEC").
Set the O_CLOEXEC flag on calls to ioctl(VIDIOC_EXPBUF).
Fixes: 436b38fd89fe ("libcamera: Open files with O_CLOEXEC")
Signed-off-by: Elias Naur <mail at eliasnaur.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
"""
I can update as required when applying if you (and at least one more
reviewer) is happy with that.
--
Kieran
>
> Signed-off-by: Elias Naur <mail at eliasnaur.com>
> ---
> src/libcamera/v4l2_videodevice.cpp | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index 1051997e..a72ef64d 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1471,7 +1471,7 @@ UniqueFD V4L2VideoDevice::exportDmabufFd(unsigned int index,
> expbuf.type = bufferType_;
> expbuf.index = index;
> expbuf.plane = plane;
> - expbuf.flags = O_RDWR;
> + expbuf.flags = O_CLOEXEC | O_RDWR;
>
> ret = ioctl(VIDIOC_EXPBUF, &expbuf);
> if (ret < 0) {
> --
> 2.39.2
>
More information about the libcamera-devel
mailing list