shm: seal the memfd

This both prevents accidental resizing of the memfd, and allows the
Wayland server to optimze reads from the buffer - it no longer has to
setup SIGBUS handlers.
This commit is contained in:
Daniel Eklöf 2020-03-25 18:30:21 +01:00
parent 03319560f5
commit dc42cc1d19
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

9
shm.c
View file

@ -277,6 +277,15 @@ shm_get_buffer(struct wl_shm *shm, int width, int height, unsigned long cookie,
goto err;
}
/* Seal file - we no longer allow any kind of resizing */
/* TODO: wayland mmaps(PROT_WRITE), for some unknown reason, hence we cannot use F_SEAL_FUTURE_WRITE */
if (fcntl(pool_fd, F_ADD_SEALS,
F_SEAL_GROW | F_SEAL_SHRINK | /*F_SEAL_FUTURE_WRITE |*/ F_SEAL_SEAL) < 0)
{
LOG_ERRNO("failed to seal SHM backing memory file");
goto err;
}
pool = wl_shm_create_pool(shm, pool_fd, memfd_size);
if (pool == NULL) {
LOG_ERR("failed to create SHM pool");