|
現象
EM64T対応プロセッサを搭載したマシンとRed Hat Enterprise Linux 3 Update3以降のSMP対応カーネルの組み合わせにおいてJavaが使用できないことがあります。
java -versionというバージョンを確認するコマンドを実行しても応答がなくなったり、セグメンテーションフォルトが発生します。
そのため、Javaを使用したアプリケーションやServeRAID Managerなどのシステム管理ツールが実行できないという現象が起こります。
現象が確認されているディストリビューション
・Red Hat Enterprise Linux 3 for x86 Update3 以降のSMP対応カーネル(2.4.21-20smp/2.4.21-20hugemem)
※SUSE LINUX Enterprise Server 9では現象が発生しないことが確認できています。
回避策
起動時のカーネルパラメータで"noexec=off"を指定することによってJavaの使用が可能になります。
カーネルパラメータを指定するには、GRUB設定ファイル(/boot/grub/grub.conf)を以下のように編集します。
/etc/grub/grub.confの設定例
-------------------------------------------------
title Red Hat Enterprise Linux AS (2.4.21-20.ELsmp)
root (hd0,0)
kernel /vmlinuz-2.4.21-20.ELsmp ro root=LABEL=/ noexec=off <= 追記します
initrd /initrd-2.4.21-20.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.4.21-20.EL)
root (hd0,0)
kernel /vmlinuz-2.4.21-20.EL ro root=LABEL=/
initrd /initrd-2.4.21-20.EL.img
-------------------------------------------------
上記設定後サーバーを再起動することにより、LinuxカーネルのNXサポートがOFFとなるためSMP対応カーネルでもJavaを従来通りに実行することができます。
当然のことですが、NXをOFFにしていますのでNXを利用しバッファ・オーバーフロー攻撃を防ぐということはできなくなってしまう点にはご注意ください。
原因
EM64T対応プロセッサはエグゼキュート・ディスエーブル・ビット機能と呼ばれる、バッファ・オーバーフロー攻撃を防止する機能を持っています。
この機能に対応するオペレーティング・システムと組み合わせることによって、悪意のある特定の「バッファ・オーバーフロー」攻撃を防げます。
この機能は、NX(No eXecute)とも呼ばれ、エグゼキュート・ディスエーブル・ビットはNXbitとも呼ばれます。
Red Hat Enterprise Linux 3 Update3に含まれるカーネルには、NXに対応したコードが取り込まれており、そのことが原因となりEM64Tを搭載したサーバーにRed Hat Enterprise Linux 3 Update3の組み合わせでJavaを実行することができなくなります。
JITコンパイラがメモリ上にコンパイルした実行コードを動的に展開して実行するため、NX機能が働きJavaの実行が妨げられていると考えられます。
SMPに対応したカーネルでのみ現象が発生するのは、ユニプロセッサー用のカーネルではNXの前提条件となるPAEモードのサポートがOFFとなっているためです。
カーネルパラメータ"noexec=off"はNXのサポートを無効にするパラメータであり、指定することでEM64T以前のCPUと同様の環境でJavaを実行することが可能となります。
エグゼキュート・ディスエーブル・ビット機能は、EM64T対応プロセッサ以外にもOpteronとItanium2に実装されている機能ですので、これらのCPU上でNX機能のサポートが追加された新しいカーネルを使用する場合は同様の現象が起きる可能性があります。
NXに関する詳細はIntel社のwebページで知ることができます。
http://www.intel.com/jp/business/bss/infrastructure/security/xdbit.htm
| 文書番号: SYJ0-009B6AF |
| 最終更新日: 2004-12-20 |
| Copyright © 2005 IBM Corporation |
|