diff options
author | emersion <contact@emersion.fr> | 2019-01-31 16:11:45 +0100 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-01-31 16:11:45 +0100 |
commit | 22faddde9e0c2c700c0692ac60d35adc43302261 (patch) | |
tree | d400020da3906928216e5ea24cec5a2b6a9a0fb9 | |
parent | 41af8d845933f2bc6b158d0cac5a0c5688cce7d0 (diff) |
backend/session/logind: dup FD with CLOEXEC
-rw-r--r-- | backend/session/logind.c | 10 |
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; |