[libcamera-devel] [PATCH v2] libcamera: v4l2_videodevice: Fix dangling file descriptor
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu May 14 11:15:01 CEST 2020
Hi Naush,
On 14/05/2020 09:40, Naushir Patuck wrote:
> The FileDescriptor constructor used in V4L2VideoDevice::exportDmabufFd()
> creates a duplicate of the fd to store in the object. The original
> fd returned by the VIDIOC_EXPBUF ioctl was never closed, and left
> dangling. This would cause out of memory conditions if the camera stream
> was repeatedly started and stopped.
>
> This change closes the original fd explicitly, fixing the leak.
>
Ouch.
And agreed,
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> src/libcamera/v4l2_videodevice.cpp | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
> index 4b9f8b5c..2f9c1333 100644
> --- a/src/libcamera/v4l2_videodevice.cpp
> +++ b/src/libcamera/v4l2_videodevice.cpp
> @@ -1276,7 +1276,14 @@ FileDescriptor V4L2VideoDevice::exportDmabufFd(unsigned int index,
> return FileDescriptor();
> }
>
> - return FileDescriptor(expbuf.fd);
> + FileDescriptor fd(expbuf.fd);
> + /*
> + * FileDescriptor takes a duplicate of fd, so we must close the
> + * original here, otherwise it will be left dangling.
> + */
> + ::close(expbuf.fd);
> +
> + return fd;
> }
>
> /**
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list