Closed6
Rustのnixクレートのforkがunsafeになっていた件
以前こんな記事を書いたことがある。
最近システムプログラミングを再びする機会があって、fork-exec のあたりを書く機会があった。そこで、以前書いた記事をそのまま使おうと思ったら、fork
が unsafe
になっていたのが気になった。どうやら 2019 年頃に修正が入ったらしい。
いろいろコミットや PR を追った結果、事の発端はこれだった。
その後、下記 PR が出される
nix に次のような Issue があがる(2019年)
下記 PR にて、fork は unsafe となったようだ。
(あとで何があったのかを読んでまとめる)
std::process:Command についている before_exec という関数があるらしいが、fork は実質この関数をエミュレートしているという関係にあるらしい。
そしてこの before_exec という関数が(というか fork が) async-signal-safe な関数以外を呼び出すと UB する可能性がある。
このことによって、fork には unsafe をつけておくべきなのでは?(ある特定の条件をきっちり満たすように使用しないと UB するので)となり、結果 unsafe になったようだ。
async-signal-safe
このスクラップは2021/06/12にクローズされました