execveatのパッチを読んでみる。

以下のパッチを読んでみる。結構昔(2006年ごろ)から、出ているパッチだが、なかなか入っていないらしい。プロセスは、一般に/proc以下にファイルが作られるが、それを前提としないシステムコールである。パスが見えなくなる影響の大きさを考えると、cgroup辺りで便利になるのかもしれない。(コンテナを良く使っていると思われるGoogleの投稿でもあるし)
syscalls,x86: Add execveat() system call [LWN.net]

大雑把に言うと以下のような構成

  • execveat
    • do_execveat
      • do_execveat_common
        • do_open_execat

なお、従来からあったexecveも同じ構成。違いは、最後の引数(flagsが0になるだけ)

  • execve
    • do_execve
      • do_execveat_common

で、今のところflagsとして、想定されているのは、symbolicを前提しないというパラメータであり

  • AT_SYMLINK_NOFOLLOW

以下のファイルで定義されている。将来的には、flagsとして、名前空間とか足せるようだが。
linux/fcntl.h at master · torvalds/linux · GitHub

とはいえ、このパッチシリーズにはmanもselftestもあり、マニュアルの同梱やテストの自動化が含まれていて、感心した。