diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-10-17 08:38:44 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-10-17 08:59:06 +0300 |
| commit | 8d08782eba427a46607a478d088744d023a292c3 (patch) | |
| tree | 2aad7a76791c35d7048af1022498502e037f6356 | |
| parent | 8555f37dbf525d86e4aa5689e6b969baf26af5d9 (diff) | |
| download | niri-8d08782eba427a46607a478d088744d023a292c3.tar.gz niri-8d08782eba427a46607a478d088744d023a292c3.tar.bz2 niri-8d08782eba427a46607a478d088744d023a292c3.zip | |
Set CLOEXEC on logind inhibit fd
Don't leak it to child processes.
| -rw-r--r-- | src/niri.rs | 13 |
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(()) |
