Commit 42ed8a6c authored by Matt Whitlock's avatar Matt Whitlock Committed by Nicolai Hähnle

gallium/winsys: replace calls to dup(2) with fcntl(F_DUPFD_CLOEXEC)

Without this fix, duplicated file descriptors leak into child processes.
See commit aaac913e for one instance
where the same fix was employed.

Cc: <mesa-stable@lists.freedesktop.org>
Signed-off-by: default avatarMatt Whitlock <freedesktop@mattwhitlock.name>
Reviewed-by: default avatarNicolai Hähnle <nicolai.haehnle@amd.com>
parent ac6064f9
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include "pipe/p_context.h"
#include "pipe/p_state.h"
#include "util/u_format.h"
......@@ -91,7 +92,7 @@ nouveau_drm_screen_create(int fd)
* nouveau_device_wrap does not close the fd in case of a device
* creation error.
*/
dupfd = dup(fd);
dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
ret = nouveau_drm_new(dupfd, &drm);
if (ret)
......
......@@ -43,6 +43,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <radeon_surface.h>
#ifndef RADEON_INFO_ACTIVE_CU_COUNT
......@@ -751,7 +752,7 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
return NULL;
}
ws->fd = dup(fd);
ws->fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
if (!do_winsys_init(ws))
goto fail1;
......
......@@ -39,6 +39,7 @@
#endif
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
static struct util_hash_table *dev_hash = NULL;
......@@ -88,7 +89,7 @@ vmw_winsys_create( int fd )
vws->device = stat_buf.st_rdev;
vws->open_count = 1;
vws->ioctl.drm_fd = dup(fd);
vws->ioctl.drm_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
vws->base.have_gb_dma = TRUE;
vws->base.need_to_rebind_resources = FALSE;
......
......@@ -22,6 +22,7 @@
*/
#include <unistd.h>
#include <fcntl.h>
#include "vc4_drm_public.h"
......@@ -30,5 +31,5 @@
struct pipe_screen *
vc4_drm_screen_create(int fd)
{
return vc4_screen_create(dup(fd));
return vc4_screen_create(fcntl(fd, F_DUPFD_CLOEXEC, 3));
}
......@@ -867,7 +867,7 @@ virgl_drm_screen_create(int fd)
virgl_screen(pscreen)->refcnt++;
} else {
struct virgl_winsys *vws;
int dup_fd = dup(fd);
int dup_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
vws = virgl_drm_winsys_create(dup_fd);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment