diff --git a/loader/src/common/daemon.cpp b/loader/src/common/daemon.cpp
index 0162cf0..e0c42d4 100644
--- a/loader/src/common/daemon.cpp
+++ b/loader/src/common/daemon.cpp
@@ -115,6 +115,7 @@ namespace zygiskd {
if (socket_utils::read_u8(fd) == 1) {
return fd;
} else {
+ close(fd);
return -1;
}
}
diff --git a/zygiskd/src/companion.rs b/zygiskd/src/companion.rs
deleted file mode 100644
index 2df5a41..0000000
--- a/zygiskd/src/companion.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-use std::ffi::c_void;
-use std::os::fd::{FromRawFd, RawFd};
-use std::os::unix::net::UnixStream;
-use std::thread;
-use anyhow::Result;
-use nix::libc;
-use passfd::FdPassingExt;
-use crate::utils::UnixStreamExt;
-use crate::dl;
-
-type ZygiskCompanionEntryFn = unsafe extern "C" fn(i32);
-
-pub fn entry(fd: i32) -> Result<()> {
- unsafe { libc::prctl(libc::PR_SET_PDEATHSIG, libc::SIGKILL) };
- let mut stream = unsafe { UnixStream::from_raw_fd(fd) };
- let name = stream.read_string()?;
- let library = stream.recv_fd()?;
- let entry = load_module(library)?;
- unsafe { libc::close(library) };
-
- let entry = match entry {
- Some(entry) => {
- log::debug!("Companion process created for `{name}`");
- stream.write_u8(1)?;
- entry
- }
- None => {
- log::debug!("No companion entry for `{name}`");
- stream.write_u8(0)?;
- return Ok(());
- }
- };
-
- loop {
- let fd = stream.recv_fd()?;
- log::trace!("New companion request from module `{name}`");
- thread::spawn(move || {
- unsafe {
- let mut s = UnixStream::from_raw_fd(fd);
- match s.write_u8(1) { // Ack
- Ok(_) => entry(fd),
- Err(_) => log::warn!("Ack failed?"),
- }
- };
- });
- }
-}
-
-fn load_module(fd: RawFd) -> Result