diff --git a/kernel/src/fs/procfs/pid/fd.rs b/kernel/src/fs/procfs/pid/fd.rs index 8ed2dc198..64c4632b8 100644 --- a/kernel/src/fs/procfs/pid/fd.rs +++ b/kernel/src/fs/procfs/pid/fd.rs @@ -27,7 +27,7 @@ impl FdDirOps { .parent(parent) .build() .unwrap(); - // Guard against the race condition when procfs is being accessed for an exiting process, + // This is for an exiting process that has not yet been reaped by its parent, // whose file table may have already been released. if let Some(file_table_ref) = file_table.lock().as_ref() { file_table_ref diff --git a/kernel/src/fs/procfs/pid/mod.rs b/kernel/src/fs/procfs/pid/mod.rs index 4da871b1c..ef8ed8e80 100644 --- a/kernel/src/fs/procfs/pid/mod.rs +++ b/kernel/src/fs/procfs/pid/mod.rs @@ -36,12 +36,13 @@ impl PidDirOps { .volatile() .build() .unwrap(); - file_table - .lock() - .as_ref() - .unwrap() - .read() - .register_observer(Arc::downgrade(&pid_inode) as _); + // This is for an exiting process that has not yet been reaped by its parent, + // whose file table may have already been released. + if let Some(file_table_ref) = file_table.lock().as_ref() { + file_table_ref + .read() + .register_observer(Arc::downgrade(&pid_inode) as _); + } pid_inode }