From c2c229fb05ad5f5f4c4727e598a6e173eaa7a634 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 25 Apr 2023 09:29:51 +0300 Subject: [PATCH] effects/screenshot: Fix potentially leaking screenshot fds to child processes dup() doesn't copy flags such as FD_CLOEXEC. --- .../screenshot/screenshotdbusinterface2.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/effects/screenshot/screenshotdbusinterface2.cpp b/src/effects/screenshot/screenshotdbusinterface2.cpp index 0a34c1a209..95ff37b27f 100644 --- a/src/effects/screenshot/screenshotdbusinterface2.cpp +++ b/src/effects/screenshot/screenshotdbusinterface2.cpp @@ -367,7 +367,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureActiveWindow(const QVariantMap &opt return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -403,7 +403,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureWindow(const QString &handle, return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -430,7 +430,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureArea(int x, int y, int width, int h return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -457,7 +457,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureScreen(const QString &name, return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -483,7 +483,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureActiveScreen(const QVariantMap &opt return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -500,7 +500,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureInteractive(uint kind, const QVariantMap &options, QDBusUnixFileDescriptor pipe) { - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap(); @@ -555,7 +555,7 @@ QVariantMap ScreenShotDBusInterface2::CaptureWorkspace(const QVariantMap &option return QVariantMap(); } - const int fileDescriptor = dup(pipe.fileDescriptor()); + const int fileDescriptor = fcntl(pipe.fileDescriptor(), F_DUPFD_CLOEXEC, 0); if (fileDescriptor == -1) { sendErrorReply(s_errorFileDescriptor, s_errorFileDescriptorMessage); return QVariantMap();