From 87bd718de54ced41544e88200418bc091a1fce50 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 15 Dec 2020 20:52:53 +0100 Subject: [PATCH] backend: use fcntl(F_DUPFD_CLOEXEC) instead of dup This makes sure the CLOEXEC flag is set on the dup'ed FD. --- backend/headless/backend.c | 13 +++++++------ backend/wayland/backend.c | 6 ++++-- backend/x11/backend.c | 10 +++++----- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/backend/headless/backend.c b/backend/headless/backend.c index 3995d1eb..c6c2d0f9 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -1,6 +1,7 @@ #define _POSIX_C_SOURCE 200809L #include #include +#include #include #include #include @@ -113,19 +114,19 @@ static bool backend_init(struct wlr_headless_backend *backend, backend->renderer = renderer; backend->egl = wlr_gles2_renderer_get_egl(renderer); - int fd = wlr_renderer_get_drm_fd(renderer); - if (fd < 0) { + int drm_fd = wlr_renderer_get_drm_fd(renderer); + if (drm_fd < 0) { wlr_log(WLR_ERROR, "Failed to get DRM device FD from renderer"); return false; } - fd = dup(fd); - if (fd < 0) { - wlr_log_errno(WLR_ERROR, "dup failed"); + drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); + if (drm_fd < 0) { + wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); return false; } - struct wlr_gbm_allocator *alloc = wlr_gbm_allocator_create(fd); + struct wlr_gbm_allocator *alloc = wlr_gbm_allocator_create(drm_fd); if (alloc == NULL) { wlr_log(WLR_ERROR, "Failed to create GBM allocator"); return false; diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c index 14b6ca6c..5b8bce9b 100644 --- a/backend/wayland/backend.c +++ b/backend/wayland/backend.c @@ -1,4 +1,6 @@ +#define _POSIX_C_SOURCE 200809L #include +#include #include #include #include @@ -335,9 +337,9 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display, goto error_event; } - drm_fd = dup(drm_fd); + drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); if (drm_fd < 0) { - wlr_log_errno(WLR_ERROR, "dup failed"); + wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); goto error_event; } diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 9482f86d..48f1aaee 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -1,6 +1,6 @@ -#define _POSIX_C_SOURCE 200112L - +#define _POSIX_C_SOURCE 200809L #include +#include #include #include #include @@ -490,9 +490,9 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, return false; } - drm_fd = dup(drm_fd); - if (fd < 0) { - wlr_log_errno(WLR_ERROR, "dup failed"); + drm_fd = fcntl(drm_fd, F_DUPFD_CLOEXEC, 0); + if (drm_fd < 0) { + wlr_log_errno(WLR_ERROR, "fcntl(F_DUPFD_CLOEXEC) failed"); return false; }