summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-07-31 02:09:44 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-08-01 01:22:14 +0300
commitefc7a85bc00a767427c219a43d0bb420dfc6361b (patch)
tree7a4efcd5d0da89a4febe098b8b0f811402648f26
parent93d975194522450894a6fe7554b28a14fbfe7214 (diff)
libcamera: shared_mem_object: Prevent memfd from shrinking or growing
The memfd underlying the SharedMem object must not shrink, or memory corruption will happen. Prevent this by setting the shrink seal on the file. As there's no valid use case for growing the memory either, set the grow seal as well. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Milan Zamazal <mzamazal@redhat.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Tested-by: Milan Zamazal <mzamazal@redhat.com> Tested-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--src/libcamera/shared_mem_object.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/libcamera/shared_mem_object.cpp b/src/libcamera/shared_mem_object.cpp
index 022645e7..d4c7991a 100644
--- a/src/libcamera/shared_mem_object.cpp
+++ b/src/libcamera/shared_mem_object.cpp
@@ -58,7 +58,8 @@ SharedMem::SharedMem() = default;
*/
SharedMem::SharedMem(const std::string &name, std::size_t size)
{
- UniqueFD memfd = MemFd::create(name.c_str(), size);
+ UniqueFD memfd = MemFd::create(name.c_str(), size, MemFd::Seal::Shrink |
+ MemFd::Seal::Grow);
if (!memfd.isValid())
return;