diff --git a/changelog/2367.changed.md b/changelog/2367.changed.md
new file mode 100644
index 0000000000..b467681600
--- /dev/null
+++ b/changelog/2367.changed.md
@@ -0,0 +1,5 @@
+Allow use of `SignalFd` through shared reference
+
+Like with many other file descriptors, concurrent use of signalfds is safe.
+Changing the signal mask of and reading signals from a signalfd can now be done
+with the `SignalFd` API even if other references to it exist.
diff --git a/src/sys/signalfd.rs b/src/sys/signalfd.rs
index ccba774d1a..4594f4deaa 100644
--- a/src/sys/signalfd.rs
+++ b/src/sys/signalfd.rs
@@ -105,11 +105,11 @@ impl SignalFd {
Ok(SignalFd(fd))
}
- pub fn set_mask(&mut self, mask: &SigSet) -> Result<()> {
+ pub fn set_mask(&self, mask: &SigSet) -> Result<()> {
self.update(mask, SfdFlags::empty())
}
- pub fn read_signal(&mut self) -> Result