@naota344の今週のLKML

今週は

  • [PATCH] hfsplus: read support for directory hardlinks
  • [PATCH 5/7] seccomp_filter: Document what seccomp_filter is and how it works.

[PATCH] hfsplus: read support for directory hardlinks

http://permalink.gmane.org/gmane.linux.file-systems/53243
OS X 10.5から(主にTimeMachineのバックアップ用途に)HFS+でディレクトリのハードリンク(!!)が追加されました。ディレクトリハードリンクの実装は

  • 通常ファイル、だが
  • ファイルの作成者が特殊
  • ハードリンクのtypeがつけられている
  • 中身に疑似inode番号が入っている

となっています。このパッチはそういった「特殊な「通常ファイル」」に対応して、TimeMachineのバックアップなどを見れるようにするためのパッチになります。

http://permalink.gmane.org/gmane.linux.file-systems/53370
もちろん、ディレクトリのハードリンクというとループする、なんかの懸念が出てきますので、renameを防止するパッチもでてきています。

ファイルシステムに関する議論はあまりLKML本体には流れてなく、gmaneで言うとgmane.linux.file-systemsで出ているのであまり紹介していなかったのですが、自分のGSoCに関するHFSPlusでしたので紹介してみました。

[PATCH 5/7] seccomp_filter: Document what seccomp_filter is and how it works.

http://permalink.gmane.org/gmane.linux.kernel/1132414
seccompといって、プロセスが実行可能なシステムコールを制限することのできる機能があります。モード1では、read,write,exit,sigreturnのみが実行可能になり、モード2では実行可能なシステムコールを自分で指定できるようになっています。そこにさらに機能を追加しようというのがこのパッチです。

このパッチによりシステムコールの引数による制限ができるようになりそうです。たとえば

const char filters[] =
  "sys_read: (fd == 1) || (fd == 2)\n"
  "sys_write: (fd == 0)\n"
  "sys_exit: 1\n"
  "sys_exit_group: 1\n"
  "on_next_syscall: 1";
prctl(PR_SET_SECCOMP, 2, filters);

とすると、 fd == 1 または fd == 2の時のみreadが、 fd == 0の時のみwriteが実行できる。といった具合です。

さて、このためにわざわざ引数をパースするコードを書いたのでしょうか? 実はそんなことはなく、 ftraceというLinuxの関数をトレースする機能のフレームワークを使ってこのseccomp_filterは実装されています。

seccompは前から「サンドボックス」の実装などに使われていましたが、seccomp_filterの機能が入ればより進んだ実装ができるのではないでしょうか。(ファイルシステムのどこにアクセスできるなんかの設定ができないので、サンドボックス、とは言うのはちょっと微妙ではあるのですが)

seccompについては http://lwn.net/Articles/332974/ が詳しいです。

続報

http://permalink.gmane.org/gmane.linux.kernel.api/2347
先週、posix_fadvice() に POSIX_FADV_DONTNEED_FS とかいう新しいadviceをつけくわえるパッチが出ていましたが、Andrew Mortonの反対がついてしまいました。