aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2019-01-31 16:11:45 +0100
committeremersion <contact@emersion.fr>2019-01-31 16:11:45 +0100
commit22faddde9e0c2c700c0692ac60d35adc43302261 (patch)
treed400020da3906928216e5ea24cec5a2b6a9a0fb9
parent41af8d845933f2bc6b158d0cac5a0c5688cce7d0 (diff)
backend/session/logind: dup FD with CLOEXEC
-rw-r--r--backend/session/logind.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/backend/session/logind.c b/backend/session/logind.c
index 9a1383ce..5bde16c2 100644
--- a/backend/session/logind.c
+++ b/backend/session/logind.c
@@ -294,7 +294,8 @@ error:
return 0;
}
-static int resume_device(sd_bus_message *msg, void *userdata, sd_bus_error *ret_error) {
+static int resume_device(sd_bus_message *msg, void *userdata,
+ sd_bus_error *ret_error) {
struct logind_session *session = userdata;
int ret;
@@ -309,7 +310,12 @@ static int resume_device(sd_bus_message *msg, void *userdata, sd_bus_error *ret_
if (major == DRM_MAJOR) {
struct wlr_device *dev = find_device(&session->base, makedev(major, minor));
- dup2(fd, dev->fd);
+
+ close(dev->fd);
+ if (fcntl(fd, F_DUPFD_CLOEXEC, dev->fd) < 0) {
+ wlr_log_errno(WLR_ERROR, "Failed to duplicate file descriptor");
+ goto error;
+ }
if (!session->base.active) {
session->base.active = true;