[tomoyo-users 705] Re: TOMOYO Linux 1.7.1 の不具合について

Back to archive index

Tetsuo Handa from-****@I-lov*****
2009年 12月 21日 (月) 19:41:21 JST


 熊猫です。



 メモリリークを修正したものを TOMOYO 1.7.1p1 としてアップロードしました。

http://osdn.dl.sourceforge.jp/tomoyo/43375/ccs-patch-1.7.1-20091220.tar.gz
MD5: 8888488e0e704c4302480a0af476426c



 バイナリパッケージを現在作成中です。ファイル名の中に 1.7.1p1 という文字列が
含まれているものが修正済みのカーネルです。

http://sourceforge.jp/projects/tomoyo/releases/?package_id=10270



 LiveCD は修正したカーネルで更新済みです。

http://osdn.dl.sourceforge.jp/tomoyo/44679/ubuntu-9.10-desktop-i386-tomoyo-1.7.1p1-20091220.iso
MD5: f13e14b24037a66549653bcfe4a95270

http://osdn.dl.sourceforge.jp/tomoyo/44763/CentOS-5.4-i386-TOMOYO-1.7.1p1-20091220.iso
MD5: 366789dd3a5c7c98324beebfc34bbaa8



 上記の ccs-patch-1.7.1-20091220.tar.gz には 2.6.33-rc1 用のパッチが含まれて
います。 TOMOYO 1.x は SELinux や Smack や AppArmor などと共存できるように
するために、 struct security_operations *security_ops; を利用しない形で実装
されています。 2.6.33 では TOMOYO が必要とするパス名に関するLSMフックが
ほぼ揃ったので、 2.6.33-rc1 用のパッチでは、独自フックの内、LSMフックでも
実現可能な処理に関してはLSMフックの中に独自フックを埋め込むという方法を
採用しています。

2.6.32.2 用パッチのフック部分

 fs/compat.c                     |    3 ++-
 fs/compat_ioctl.c               |    7 +++++++
 fs/exec.c                       |    3 ++-
 fs/fcntl.c                      |    4 ++++
 fs/ioctl.c                      |    5 +++++
 fs/namei.c                      |   38 ++++++++++++++++++++++++++++++++++++++
 fs/namespace.c                  |   22 ++++++++++++++++++++++
 fs/open.c                       |   29 +++++++++++++++++++++++++++++
 fs/proc/version.c               |    7 +++++++
 include/linux/init_task.h       |    9 +++++++++
 include/linux/sched.h           |    6 ++++++
 kernel/compat.c                 |    3 +++
 kernel/kexec.c                  |    3 +++
 kernel/kmod.c                   |    5 +++++
 kernel/module.c                 |    5 +++++
 kernel/ptrace.c                 |    5 +++++
 kernel/sched.c                  |    3 +++
 kernel/signal.c                 |   11 +++++++++++
 kernel/sys.c                    |   11 +++++++++++
 kernel/sysctl.c                 |    4 ++++
 kernel/time.c                   |    5 +++++
 kernel/time/ntp.c               |    6 ++++++
 net/ipv4/inet_connection_sock.c |    3 +++
 net/ipv4/inet_hashtables.c      |    3 +++
 net/ipv4/raw.c                  |    4 ++++
 net/ipv4/udp.c                  |    7 ++++++-
 net/ipv6/raw.c                  |    4 ++++
 net/ipv6/udp.c                  |    4 ++++
 net/socket.c                    |   21 +++++++++++++++++++++
 net/unix/af_unix.c              |    5 +++++
 security/Kconfig                |    2 ++
 security/Makefile               |    3 +++
 32 files changed, 247 insertions(+), 3 deletions(-)

2.6.33-rc1 用パッチのフック部分

 fs/compat.c                     |    2
 fs/compat_ioctl.c               |    4
 fs/exec.c                       |    2
 fs/ioctl.c                      |    2
 fs/namei.c                      |   10 ++
 fs/namespace.c                  |    9 ++
 fs/proc/version.c               |    7 +
 include/linux/init_task.h       |    9 ++
 include/linux/sched.h           |    6 +
 include/linux/security.h        |   60 +++++++++-----
 kernel/kexec.c                  |    3
 kernel/kmod.c                   |    5 +
 kernel/ptrace.c                 |    4
 kernel/sched.c                  |    2
 kernel/signal.c                 |   10 ++
 kernel/sys.c                    |   10 ++
 net/ipv4/inet_connection_sock.c |    2
 net/ipv4/inet_hashtables.c      |    2
 net/ipv4/raw.c                  |    3
 net/ipv4/udp.c                  |    4
 net/ipv6/raw.c                  |    3
 net/ipv6/udp.c                  |    3
 net/socket.c                    |    5 +
 security/Kconfig                |    2
 security/Makefile               |    3
 security/security.c             |  162 +++++++++++++++++++++++++++++++---------
 26 files changed, 274 insertions(+), 60 deletions(-)

 LSMのフックは TOMOYO 独自のフックよりも広範囲に挿入されているため、
LSMのフックの中に TOMOYO 独自のフックを埋め込むことにより、 2.6.32 までは
チェックされていなかった箇所で TOMOYO のアクセス許可チェックが行われるように
なる場合があります。アプリケーション用のポリシーを作るにあたり、使っている
ハードウェアやファイルシステムなどに依存してしまうと、ポリシーを配布することが
不可能になってしまいます。例えば以下のようにスタッカブルファイルシステムを
利用している場合、アプリケーションが要求したパス名だけでなく、下層にある別の
ファイルシステム上のパス名に対してもアクセス許可を与える必要が生じて
しまいます。

# mkdir /tmp/ro /tmp/rw /tmp/mnt
# echo hello > /tmp/ro/file
# mount -t aufs -o br:/tmp/rw=rw:/tmp/ro=ro,udba=inotify none /tmp/mnt
# cat /tmp/mnt/file

TOMOYO 独自のフック( ccs_open_permission() )を使った場合は

  allow_read /tmp/mnt/file

だけでOKですが、LSMのフック( security_dentry_open() )を使った場合は

  allow_read /tmp/mnt/file
  allow_read /tmp/ro/file

の両方が必要になります。アプリケーション用のポリシーを作る人が
アプリケーションを動かす人の環境のマウント状況まで面倒を見ることはできません。
そのため、アプリケーションからのアクセス要求と、カーネル内部からのアクセス
要求とを区別できるようになっているべきだと考えています。しかし、残念なことに
LSMフックの殆どは区別するための情報が渡されません。ですから、LSMフックの
中に TOMOYO 独自のフックを埋め込むことは得策とは限らないのです。
実際、ファイルのオープンに関してはLSMフックを使わないようにしています。

 それでも、既存のLSMを利用可能な箇所で使っていない実装は門前払いされて
しまうようですので、今回、可能な範囲でLSMフックの中に埋め込むようにして
みました。どうぞ 2.6.33-rc1 用のパッチをテストしてみてください。問題が
見つかった場合には遠慮なくお知らせください。




tomoyo-users メーリングリストの案内
Back to archive index