Do not treat ppid as constant.

This commit is contained in:
4lDO2
2025-04-18 20:10:49 +02:00
parent aa034fccc8
commit 8cfc7e8fac
4 changed files with 10 additions and 10 deletions
+1 -4
View File
@@ -203,7 +203,6 @@ pub unsafe fn initialize(#[cfg(feature = "proc")] proc_fd: FdGuard) {
STATIC_PROC_INFO.get().write(StaticProcInfo {
pid: metadata.pid,
ppid: metadata.ppid,
#[cfg(feature = "proc")]
proc_fd: MaybeUninit::new(proc_fd),
@@ -228,10 +227,9 @@ pub unsafe fn initialize(#[cfg(feature = "proc")] proc_fd: FdGuard) {
}
}
#[repr(C)] // TODO: is this required?
#[repr(C)] // TODO: is repr(C) required?
pub(crate) struct StaticProcInfo {
pid: u32,
ppid: u32, // TODO: dynamic
proc_fd: MaybeUninit<FdGuard>,
has_proc_fd: bool,
}
@@ -292,7 +290,6 @@ unsafe fn child_hook_common(args: ChildHookCommonArgs) {
.get()
.replace(StaticProcInfo {
pid: metadata.pid,
ppid: metadata.ppid,
has_proc_fd: args.new_proc_fd.is_some(),
proc_fd: args
.new_proc_fd
-2
View File
@@ -970,7 +970,6 @@ pub unsafe fn make_init() -> [&'static FdGuard; 2] {
STATIC_PROC_INFO.get().write(crate::StaticProcInfo {
pid: 1,
ppid: 1,
proc_fd: MaybeUninit::new(proc_fd),
has_proc_fd: true,
});
@@ -991,7 +990,6 @@ pub unsafe fn make_init() -> [&'static FdGuard; 2] {
pub(crate) static STATIC_PROC_INFO: SyncUnsafeCell<StaticProcInfo> =
SyncUnsafeCell::new(StaticProcInfo {
pid: 0,
ppid: 0,
proc_fd: MaybeUninit::zeroed(),
has_proc_fd: false,
});
+2
View File
@@ -34,6 +34,7 @@ pub enum ProcCall {
// TODO: replace with sendfd equivalent syscall for sending memory
SyncSigPctl = 10,
Sigdeq = 11,
Getppid = 12,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(usize)]
@@ -59,6 +60,7 @@ impl ProcCall {
9 => Self::Sigq,
10 => Self::SyncSigPctl,
11 => Self::Sigdeq,
12 => Self::Getppid,
_ => return None,
})
}
+7 -4
View File
@@ -5,7 +5,7 @@ use core::{
};
use syscall::{
error::{Error, Result, EINTR},
error::{self, Error, Result, EINTR},
CallFlags, TimeSpec, EINVAL, ERESTART,
};
@@ -76,7 +76,10 @@ pub fn posix_sigqueue(pid: usize, sig: usize, arg: usize) -> Result<()> {
&[ProcCall::Sigq as u64, pid as u64, sig as u64],
)
}) {
Ok(_) | Err(Error { errno: EINTR }) => Ok(()),
Ok(_)
| Err(Error {
errno: error::EINTR,
}) => Ok(()),
Err(error) => Err(error),
}
}
@@ -87,8 +90,8 @@ pub fn posix_getpid() -> u32 {
}
#[inline]
pub fn posix_getppid() -> u32 {
// SAFETY: read-only except during program/fork child initialization
unsafe { addr_of!((*crate::STATIC_PROC_INFO.get()).ppid).read() }
this_proc_call(&mut [], CallFlags::empty(), &[ProcCall::Getppid as u64]).expect("cannot fail")
as u32
}
#[inline]
pub unsafe fn sys_futex_wait(addr: *mut u32, val: u32, deadline: Option<&TimeSpec>) -> Result<()> {