mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 06:30:11 +01:00
gallium/winsys: replace calls to dup(2) with fcntl(F_DUPFD_CLOEXEC)
Without this fix, duplicated file descriptors leak into child processes. See commitaaac913e90for one instance where the same fix was employed. Cc: <mesa-stable@lists.freedesktop.org> Signed-off-by: Matt Whitlock <freedesktop@mattwhitlock.name> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> (cherry picked from commit42ed8a6c9c)
This commit is contained in:
parent
39c0535646
commit
e7491c3bbd
5 changed files with 9 additions and 5 deletions
|
|
@ -1,5 +1,6 @@
|
|||
#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)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,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
|
||||
|
|
@ -790,7 +791,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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -864,7 +864,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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue