Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix from_process_at return error in old kernel #241

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

qq906907952
Copy link

@qq906907952 qq906907952 commented Feb 2, 2023

In the function "FDInfo::from_process_at" it use "rustix::fs::openat" to open file like "/proc/{pid}/fd/x"
which will encounter the 'Os { code: 40, kind: FilesystemLoop, message: "Symbolic link loop" }' error in old version kernel
(test in 2.6.32-696.16.1.el6.x86_64, i guess the some flag not handle correct or not support in old kernel version, espcially SYMLINK_NOFOLLOW)

when i remove SYMLINK_NOFOLLOW flag in openat , "rustix::fs::openat" raise 'Os { code: 6, kind: Uncategorized, message: "No such device or address" }' error

it also encounter 'Os { code: 22, kind: InvalidInput, message: "Invalid argument" }' when get metadata use rustix::fs::statat with flags.

so i remove the "rustix::fs::openat" and remove all AtFlags in "rustix::fs::statat". only use "rustix::fs::readlinkat" and "rustix::fs::statat" to get the fd type and metadata

also remove the unused field "root" in struct FDsIter

it work in old kernel (i only test in 2.6.32-696.16.1.el6.x86_64) and new kernel

remove unused field `root` in struct FDsIter
@eminence
Copy link
Owner

Hi, thanks for the bug report, and for the potential fix. I would like to be able to support 2.6 kernels, but getting ahold of one for testing is a bit challenging. I need to do some more research to understand the impact of removing SYMLINK_NOFOLLOW and EMPTY_PATH from the calls to statat

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants