From 63d7dc0470fb61e0846c33fc60db3f485405bd77 Mon Sep 17 00:00:00 2001 From: vasilito Date: Sat, 11 Jul 2026 05:30:31 +0300 Subject: [PATCH] add filetable state logging at EBADF point --- src/syscall/fs.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/syscall/fs.rs b/src/syscall/fs.rs index 6970098289..0cfb9ddfab 100644 --- a/src/syscall/fs.rs +++ b/src/syscall/fs.rs @@ -79,7 +79,24 @@ pub fn openat( let (context, mut token) = current.token_split(); let name = context.name; let pipe = context.get_file(fh, &mut token).ok_or_else(|| { - info!("openat: EBADF fh={:#x} ctx='{}'", fh.get(), name); + let ft = context.files.read(token.token()); + let raw = fh.get(); + let stripped = raw & !syscall::UPPER_FDTBL_TAG; + let is_upper = raw & syscall::UPPER_FDTBL_TAG != 0; + let upper_len = ft.upper_fdtbl.len(); + let upper_at_idx = if is_upper && stripped < ft.upper_fdtbl.len() { + ft.upper_fdtbl[stripped].is_some() + } else { + false + }; + let upper_present: String = ft.upper_fdtbl.iter().enumerate() + .filter(|(_, f)| f.is_some()) + .map(|(i, _)| i.to_string()) + .collect::>().join(","); + info!( + "openat: EBADF fh={:#x} ctx='{}' is_upper={} idx={} upper_len={} upper_at_idx={} upper_present=[{}]", + raw, name, is_upper, stripped, upper_len, upper_at_idx, upper_present + ); Error::new(EBADF) })?; let desc = pipe.description.read(token.token());