Client: Add F_SEAL_SHRINK seal to shm backing file

This lets libwayland-server avoid installing a SIGBUS handler when it
wants to mmap() the backing file and access the contents of shared
memory client buffers.

Change-Id: Id0b17f729799535d73e8700c5a99c32fd88a068a
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: David Edmundson <davidedmundson@kde.org>
This commit is contained in:
Vlad Zahorodnii 2022-11-17 15:25:37 +02:00
parent f733811432
commit b2c0a783d0

View File

@ -16,6 +16,7 @@
#include <QtWaylandClient/private/wayland-wayland-client-protocol.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
@ -25,6 +26,9 @@
# ifndef MFD_CLOEXEC
# define MFD_CLOEXEC 0x0001U
# endif
# ifndef MFD_ALLOW_SEALING
# define MFD_ALLOW_SEALING 0x0002U
# endif
#endif
QT_BEGIN_NAMESPACE
@ -39,7 +43,9 @@ QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display,
int fd = -1;
#ifdef SYS_memfd_create
fd = syscall(SYS_memfd_create, "wayland-shm", MFD_CLOEXEC);
fd = syscall(SYS_memfd_create, "wayland-shm", MFD_CLOEXEC | MFD_ALLOW_SEALING);
if (fd >= 0)
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
#endif
QScopedPointer<QFile> filePointer;