Do not treat ppid as constant.
This commit is contained in:
+1
-4
@@ -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
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
@@ -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
@@ -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<()> {
|
||||
|
||||
Reference in New Issue
Block a user