[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu
14 messages
2023/01/07
[ruby-core:111844] [Ruby master Feature#19347] Add Dir.fchdir
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-01-16 23:01:36 UTC
List:
ruby-core #111844
Issue #19347 has been updated by kjtsanaktsidis (KJ Tsanaktsidis).
I have definitely wanted this before FWIW. The main use-case I've had for this feature is writing code to look at things in the `/proc` filesystem on Linux. If a process exits, its pid can be re-used, and so the same path in `/proc` can now refer to a totally different process!
To operate on `/proc` safely, you need to open the the `/proc/#{pid}` directory first, and use `openat(2)` to open individual files from within that directory. If the process exits, the directory suddenly becomes empty, so your operations will begin failing with `ENOENT`. Even if a new process is started with the same pid, the entry in `/proc` has a different inode, so you will never accidentally read a different process's data.
----------------------------------------
Feature #19347: Add Dir.fchdir
https://bugs.ruby-lang.org/issues/19347#change-101255
* Author: jeremyevans0 (Jeremy Evans)
* Status: Open
* Priority: Normal
----------------------------------------
Recently, I was working on a program that passes file descriptors over UNIX sockets (using `send_io`/`recv_io`). For file/socket/device descriptors, this works fine using `File#reopen`. However, I found that while Ruby supports `Dir#fileno` to return a directory file descriptor, it cannot use that file descriptor when changing directories.
I worked around this in my program by writing the directory path over the UNIX socket, but this results in a TOCTOU vulnerability in certain cases. Passing the directory file descriptor would be simpler and avoid the vulnerability.
I've submitted a pull request to implement this method: https://github.com/ruby/ruby/pull/7135
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/