aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-10-17 08:38:44 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2024-10-17 08:59:06 +0300
commit8d08782eba427a46607a478d088744d023a292c3 (patch)
tree2aad7a76791c35d7048af1022498502e037f6356 /src
parent8555f37dbf525d86e4aa5689e6b969baf26af5d9 (diff)
downloadniri-8d08782eba427a46607a478d088744d023a292c3.tar.gz
niri-8d08782eba427a46607a478d088744d023a292c3.tar.bz2
niri-8d08782eba427a46607a478d088744d023a292c3.zip
Set CLOEXEC on logind inhibit fd
Don't leak it to child processes.
Diffstat (limited to 'src')
-rw-r--r--src/niri.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/niri.rs b/src/niri.rs
index e553d971..bb02255d 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -1919,6 +1919,10 @@ impl Niri {
#[cfg(feature = "dbus")]
pub fn inhibit_power_key(&mut self) -> anyhow::Result<()> {
+ use std::os::fd::{AsRawFd, BorrowedFd};
+
+ use smithay::reexports::rustix::io::{fcntl_setfd, FdFlags};
+
let conn = zbus::blocking::ConnectionBuilder::system()?.build()?;
let message = conn.call_method(
@@ -1929,7 +1933,14 @@ impl Niri {
&("handle-power-key", "niri", "Power key handling", "block"),
)?;
- let fd = message.body()?;
+ let fd: zbus::zvariant::OwnedFd = message.body()?;
+
+ // Don't leak the fd to child processes.
+ let borrowed = unsafe { BorrowedFd::borrow_raw(fd.as_raw_fd()) };
+ if let Err(err) = fcntl_setfd(borrowed, FdFlags::CLOEXEC) {
+ warn!("error setting CLOEXEC on inhibit fd: {err:?}");
+ };
+
self.inhibit_power_key_fd = Some(fd);
Ok(())