2012年04月17日

ベンチマーク測定に Debian/Ubuntu の lmbench/3.0-a9-1 を使用する場合の注意点

最初の報告から1ヶ月経ったけどまだ何の反応も無いので、犠牲者をこれ以上増やさないようにするために、先に周知します。

lmbench パッケージには、プログラム実行に要する遅延時間を測定する lat_proc というプログラムが入っていますが、 Debian/Ubuntu の lmbench-3.0-a9 をパッケージでインストールした場合には正しい結果が得られません。

これは、存在しない /var/tmp/lmbench/hello というプログラムを lat_proc が実行しようとするため、 execve() が失敗してしまうことが原因です。(失敗してもエラーメッセージ1つ出さないという作りはどうかと思いますが。(汗))

TOMOYO で解析すると、 sh -c を実行しているのに hello プログラムのためのドメインが作成されていないことが確認できます。

   43:  0     /usr/lib/lmbench/bin/i686-pc-linux-gnu/lmbench
   44:  0         /bin/cp
   45:  0         /bin/date
   46:  0         /bin/hostname
   47:  0         /bin/mkdir
   48:  0         /bin/mount
   49:  0         /bin/netstat
   50:  0         /bin/rm
   51:  0         /bin/sleep
   52:  0         /bin/sync
   53:  0         /bin/tar
   54:  0         /bin/uname
   55:  0         /sbin/ifconfig
   56:  0         /usr/bin/awk
   57:  0         /usr/bin/expr
   58:  0         /usr/bin/touch
   59:  0         /usr/bin/uptime
   60:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_file_rd
   61:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_mem
   62:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_mmap_rd
   63:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_pipe
   64:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_tcp
   65:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/bw_unix
   66:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_connect
   67:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_ctx
   68:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_fs
   69:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_http
   70:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_mmap
   71:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_pagefault
   72:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_pipe
   73:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_proc
   74:  0             /bin/sh
                          *** ↑ hello プログラムのドメインが存在しない ***
   75:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_rpc
   76:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_select
   77:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_sig
   78:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_syscall
   79:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_tcp
   80:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_udp
   81:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lat_unix
   82:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lmdd
   83:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/lmhttp
   84:  0         /usr/lib/lmbench/bin/i686-pc-linux-gnu/msleep
   85:  0         /usr/lib/lmbench/scripts/os

lmbench-3.0-a9.tgz から作成すると正しい結果が得られていることが判ります。

  182:  0     /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lmbench
  183:  0         /bin/cp
  184:  0         /bin/date
  185:  0         /bin/hostname
  186:  0         /bin/mkdir
  187:  0         /bin/mount
  188:  0         /bin/netstat
  189:  0         /bin/rm
  190:  0         /bin/sleep
  191:  0         /bin/sync
  192:  0         /bin/tar
  193:  0         /bin/uname
  194:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_file_rd
  195:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_mem
  196:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_mmap_rd
  197:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_pipe
  198:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_tcp
  199:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/bw_unix
  200:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_connect
  201:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_ctx
  202:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_fs
  203:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_http
  204:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_mmap
  205:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_pagefault
  206:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_pipe
  207:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_proc
  208:  0             /bin/sh
  209:  0                 /tmp/hello
                          *** ↑ hello プログラムのドメインが作られている ***
  210:  0             /tmp/hello
  211:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_rpc
  212:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_select
  213:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_sig
  214:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_syscall
  215:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_tcp
  216:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_udp
  217:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lat_unix
  218:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lmdd
  219:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/lmhttp
  220:  0         /root/lmbench-3.0-a9/bin/i686-pc-linux-gnu/msleep
  221:  0         /sbin/ifconfig
  222:  0         /usr/bin/awk
  223:  0         /usr/bin/expr
  224:  0         /usr/bin/touch
  225:  0         /usr/bin/uptime

ということで、 lmbench/3.0-a9-1 を使う場合、事前に hello プログラムを /var/tmp/lmbench/hello にコピーするか、あるいは、 lmbench-3.0-a9.tgz からコンパイルしたものを使用するようにしてください。(これ以外にも不具合があるかもしれないので、修正が完了するまでは lmbench-3.0-a9.tgz からコンパイルする方がおススメです。)

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666072

posted by 熊猫さくら at 20:29| Comment(0) | TrackBack(0) | Linux

2012年04月01日

CaitSith プロジェクト始めました。

CaitSith は Linux 2.6.27 以降のカーネル向けのアクセス制限モジュールです。元々は TOMOYO Linux の次期バージョンとして作成していたものが、あまりにも考え方や使い方の変更が大きくなりすぎてしまったため、「もはや TOMOYO とは呼べない」ということで新しい名前を付けました。

今日、初版をリリースしました。
http://sourceforge.jp/projects/tomoyo/lists/archive/users/2012-April/000968.html

posted by 熊猫さくら at 23:43| Comment(0) | TrackBack(0) | CaitSith

2012年03月11日

Linux に Adobe Flash Plugin をインストールした後に確認すべきこと

Adobe Flash Plugin は rpm などの形式でインストールできますが、単にインストールしただけではブラウザから認識してくれないようです。しかも、最新版をインストールした後も Firefox が「安全のために最新版ではない Flash を無効化したよ( For your safety, Firefox has disabled your outdated version of Flash. )」なんて表示してくるものですから、「認識しているけど使っていない」のだと誤解するでしょう。

mozilla.png

Firefox から認識できるようにするには、最新版をインストールした後に、以下のようにシンボリックリンクを張る必要があります。

# ln -s /usr/lib/flash-plugin/libflashplayer.so /usr/lib/mozilla/plugins-wrapped/
posted by 熊猫さくら at 20:27| Comment(0) | TrackBack(0) | Linux

2012年03月08日

RHEL6.2 カーネルと sendmmsg() システムコール

ちょうどDNSを使った隠れ通信ネタが出たので、熊猫からも1つ。

RHEL6.2 カーネルには、 Linux 3.0 で導入された sendmmsg() システムコールがバックポートされています。これを使うと、1回のシステムコールで複数の宛先に送信できるので、1個目のパケットだけでなく2個目以降のパケットについても宛先チェックをしないと、不審なホストとの隠れ通信に利用されてしまいます。

Linux 3.0.0 のリリース直後に sendmmsg() システムコールが追加されていることに気付き、ソースコードをチェックしてみたところ、LSMによるチェックは1個目のパケットの送信時だけしか行われていませんでした。そのため、「はぅ〜、1個目の宛先しかチェックできないのでは、 AKARI による送信先アドレスチェックが不完全なものになってしまうよ〜」とガッカリしました。当時、 TOMOYO 2.x にネットワークに対する送受信アドレスチェック機能を追加することも目指していたため、せっかくのパフォーマンス向上分を減少させてしまう仕様変更をどうやって提案しようかと悩みました。でも、幸いなことに、 SMACK が既に宛先アドレスから算出されるラベルに基づくアクセス制御を搭載していたため、 TOMOYO のための仕様変更パッチとしてではなく SMACK のためのリグレッション修正パッチとして提案することができました。

そうして Linux 3.0.2 で熊猫が提案したリグレッション修正パッチが取り込まれたのですが、そのパッチには別のバグがありました。そのバグを修正するパッチは Linux 3.0.5 で取り込まれました。

そんな中、 RHEL 6.2 のカーネル 2.6.32-220.el6 がリリースされた訳ですが、熊猫のリグレッション修正パッチだけしか含まれていなかったので、「熊猫のリグレッション修正パッチのバグを修正するパッチを忘れてるよ」と報告したところ、 CVE-2011-4594 として登録されてしまいました。何か対応が大げさな気がしないでもない。(^^;

で、その修正パッチを含んだカーネル 2.6.32-220.7.1.el6 がリリースされたことを今日知りました。

ところで、熊猫が提案したリグレッション修正パッチ、 SELinux しか有効にする気が無い RedHat 系カーネルにとっては、実はバックポートする必要性はありませんでした。なぜなら、 SELinux では宛先アドレスに基づくアクセス制御をしていないからです。情報フロー制御は気にするのに、 sendmmsg() システムコールを使って不審なホストのDNSサービスとの隠れ通信をすることは気にしないとはこれ如何に?

posted by 熊猫さくら at 20:25| Comment(0) | TrackBack(0) | Linux

2012年03月03日

TOMOYO Linux 1.8.3p5 / 1.7.3p2 / 1.6.9p2 および AKARI 1.0.25 が公開されました。

マウント制限のパーミッションチェックが不正確になる場合があるのを修正しました。また、カーネル 3.4 に対応するための修正を行いました。カーネル 3.4 での修正がバックポートされた場合、古いバージョンでは起動時にカーネルパニックが発生するのでご注意ください。

http://sourceforge.jp/projects/tomoyo/lists/archive/users/2012-March/000963.html

posted by 熊猫さくら at 22:52| Comment(0) | TrackBack(0) | TOMOYO Linux

2011年12月13日

TOMOYO Linux / AKARI をソースからコンパイルして利用されている方へのお知らせ

先日、パス名を計算するために使用している __d_path() という関数に対する仕様変更が発生しました。この仕様変更により、カーネル 3.2-rc4 までは正常に動いていた TOMOYO や AKARI が、カーネル 3.2-rc5 からはカーネルパニックにより起動できなくなってしまいました。

この仕様変更は、カーネル 2.6.36 までバックポートされる可能性があり、少なくともカーネル 3.0 と 3.1 へはバックポートされる見込みです。 ccs-patch-1.8.3-20111118.tar.gz および akari-1.0.23-20111118.tar.gz はこの仕様変更に未対応であるため、今後は使用しないでください。この仕様変更に対応したものを、 ccs-patch-1.8.3-20111213.tar.gz および akari-1.0.24-20111213.tar.gz としてアップロードしましたので、そちらをご利用ください。

この仕様変更は、 TOMOYO 2.5 をカーネル 2.6.33 〜 3.1 にバックポートして使われる方、および、 TOMOYO 2.4 をカーネル 2.6.33 〜 3.0 にバックポートして使われる方にも影響します。不審な電話がかかってきたら・・・じゃなくて、カーネルパニックで起動できなくなったら、この仕様変更が原因の可能性を疑ってください。

TOMOYO 1.8 をバイナリパッケージで利用されている方は、今後のアップデートは仕様変更に対応したパッチを用いて作成されるため、対処は不要です。

posted by 熊猫さくら at 20:05| Comment(0) | TrackBack(0) | TOMOYO Linux

2011年11月11日

TOMOYO Linux 1.8.3p2 / AKARI 1.0.22 が公開されました。

TOMOYO Linux に関するいろいろなお知らせ・・・だけでは物足りないので、エサでも撒いてみましょうかね?

セキュリティ&プログラミングキャンプ2011と高度ポリテクセンターセミナーで使用した、CCさくらワールド満開なテキストを公開します。

posted by 熊猫さくら at 23:11| Comment(0) | TrackBack(0) | TOMOYO Linux

2011年10月24日

Linux 3.1 がリリースされました。

kernel.org が復旧して tar ball をダウンロードできるようになりましたが、署名のチェック方法が従来とは異なっているようです。

今までは圧縮されたファイル毎に署名ファイルがあったので、例えば linux-3.0.tar.bz2 に対する署名ファイルは linux-3.0.tar.bz2.sign という名前で配布されていました。そのため、チェックするには、 linux-3.0.tar.bz2 と linux-3.0.tar.bz2.sign を同じディレクトリに置き、

$ gpg --verify linux-3.0.tar.bz2.sign
gpg: Signature made Fri Jul 22 12:31:02 2011 JST using DSA key ID 517D0F0E
gpg: Good signature from "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: C75D C40A 11D7 AF88 9981 ED5B C86B A06A 517D 0F0E

のように実行していました。しかし、 https://lkml.org/lkml/2011/10/23/122 によると、これからは圧縮前のファイルに対する署名ファイルのみの配布となるため、例えば linux-3.1.tar.bz2 に対する署名ファイルは linux-3.0.tar.sign のようになります。チェックするには、 linux-3.1.tar.bz2 と linux-3.1.tar.sign を同じディレクトリに置き、

$ bzcat linux-3.1.tar.bz2 | gpg --verify linux-3.1.tar.sign -
gpg: Signature made Mon Oct 24 16:17:58 2011 JST using RSA key ID 00411886
gpg: Good signature from "Linus Torvalds <torvalds@linux-foundation.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: ABAF 11C6 5A29 70B1 30AB E3C4 79BE 3E43 0041 1886

のように実行します。署名に使われている鍵もアップデートされているので、忘れないでくださいね。

posted by 熊猫さくら at 22:05| Comment(0) | TrackBack(0) | Linux

2011年09月29日

TOMOYO Linux 1.8.3 / AKARI 1.0.20 が公開されました。

ドメイン遷移の方法を柔軟に指定できるようになりました。
http://sourceforge.jp/projects/tomoyo/lists/archive/users/2011-September/000918.html

Linux 3.2 では TOMOYO 2.5 が搭載され、遂にネットワークアドレスに対するアクセス制御機能の一部が使えるようになります。 TOMOYO 2.4 と同様、 2.6.33 以降までバックポートできます。ユーザランド用ツールパッケージも既に公開されていますので、バックポートを容認できる方は TOMOYO 2.4 よりも TOMOYO 2.5 がお勧めです。
http://sourceforge.jp/projects/tomoyo/lists/archive/users/2011-September/000915.html

AKARI は ARM や SH でも動作するようになりました。 LSM が有効なカーネルであれば、 Android でも使えることでしょう。
http://sourceforge.jp/projects/tomoyo/lists/archive/users/2011-September/000914.html

posted by 熊猫さくら at 23:29| Comment(0) | TrackBack(0) | TOMOYO Linux

2011年09月09日

openSUSE 12.1 では TOMOYO 2.4 が使えるようになります。

Linux 3.1 を採用することになったため、 TOMOYO 2.3 ではなく TOMOYO 2.4 が搭載されることになりました。 TOMOYO 2.4 の1番乗りかと思われます。

posted by 熊猫さくら at 22:40| Comment(0) | TrackBack(0) | TOMOYO Linux