(57)【要約】課題  シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられることを防止する。解決手段  シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられる可能性のある関数１１２５に配置した命令１１２１を実行すると、プロセスのシグナルハンドラテーブルが変更され、関数１１２５の処理中に実行されるシグナルハンドラがシグナルハンドラフック関数となる。シグナルが発生し、シグナルハンドラフック関数が実行されると、プロセスのセキュリティレベルを不測の処理を実行できないセキュリティレベルに変更した上で、本来のシグナルハンドラを実行することで、シグナルハンドラの不測の処理を防ぐ。また、関数１１２５を終了する際は、第２の特定の命令１１２２を実行し、シグナルハンドラテーブルを元の状態に戻す。
2008111382.tif 000002
【特許請求の範囲】
【請求項１】
ＯＳの制御の下にプロセスを実行する情報処理装置であって、
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、
前記プロセスが前記第１の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、
前記プロセスが前記第２の特定の命令を実行した際、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰手段と、
前記プロセスが前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、
前記シグナルハンドラ取得手段によるシグナルハンドラの取得後、前記プロセスの前記属性値を変更するセキュリティレベル変更手段と、
前記プロセスが前記第４の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを備えたことを特徴とする情報処理装置。
【請求項２】
ＯＳの制御の下にプロセスを実行する情報処理装置であって、
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、
前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、
前記特定のプロセスが前記第２の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰手段と、
前記プロセスが前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、
前記シグナルハンドラ取得手段によるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更手段と、
前記プロセスが前記第４の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを備えたことを特徴とする情報処理装置。
【請求項３】
前記セキュリティレベル変更手段は、属性値の変更対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記セキュリティレベル復帰手段は、属性値の復帰対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記属性値が、前記プロセスのセキュリティレベルを示す属性値であることを特徴とする請求項１から４の何れか１項に記載の情報処理装置。
【請求項６】
前記属性値が、前記プロセスのセキュリティレベルを示す属性値であり、且つ
前記プロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する特権命令実行制御手段を有することを特徴とする請求項１または２記載の情報処理装置。
【請求項７】
前記属性値を変更するルールを保持するセキュリティレベル変更規則記憶手段を備え、
前記セキュリティレベル変更手段は前記セキュリティレベル変更規則記憶手段に記憶されたルールに基づいて前記属性値を変更することを特徴とする請求項１から６の何れか１項に記載の情報処理装置。
【請求項８】
前記セキュリティレベル変更規則記憶手段には、前記属性値の変更前の属性値と変更後の属性値との組みが記憶され、
前記セキュリティレベル変更手段は、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスの前記属性値と等しい値の変更前の属性値と組みとなる変更後の属性値に変更することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記セキュリティレベル変更規則記憶手段には、シグナルの値と前記属性値との組が記憶され、
前記セキュリティレベル変更手段は、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスが受信したシグナルの値と組みとなる属性値に変更することを特徴とする請求項７に記載の情報処理装置。
【請求項１０】
情報処理装置にて、ＯＳの制御の下にプロセスを実行する情報処理方法であって、
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、
前記プロセスが前記第１の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、
前記プロセスの実行中に受信したシグナルに対応するシグナルハンドラを前記シグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラが前記シグナルハンドラフック関数である場合、前記シグナルハンドラフック関数を呼び出すシグナル処理ステップと、
前記プロセスが前記シグナルハンドラフック関数の前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、
前記シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更ステップと、
前記プロセスが前記シグナルハンドラ取得ステップで取得したシグナルハンドラを前記シグナルハンドラフック関数において実行した後に前記第４の特定の命令を実行したときに、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰ステップと、
前記プロセスが前記関数の前記第２の特定の命令を実行したときに、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰ステップとを含むことを特徴とする情報処理方法。
【請求項１１】
情報処理装置にて、ＯＳの制御の下にプロセスを実行する情報処理方法であって、
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、
前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、
前記プロセスの実行中に受信したシグナルに対応するシグナルハンドラを前記シグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラが前記シグナルハンドラフック関数である場合、前記シグナルハンドラフック関数を呼び出すシグナル処理ステップと、
前記プロセスが前記シグナルハンドラフック関数の前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、
前記シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更ステップと、
前記特定のプロセスが前記第２の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記第１のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記第１のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記第２のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰ステップとを含むことを特徴とする情報処理方法。
【請求項１２】
前記セキュリティレベル変更ステップにおいて、属性値の変更対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項１１記載の情報処理方法。
【請求項１３】
前記セキュリティレベル復帰ステップにおいて、属性値の復帰対象となる前記プロセスの識別子が前記シグナルハンドラ記憶手段のプロセス識別子群に含まれている場合に限って、前記プロセスの前記属性値を変更することを特徴とする請求項１２記載の情報処理方法。
【請求項１４】
前記属性値が、前記プロセスのセキュリティレベルを示す属性値であることを特徴とする請求項１０から１３の何れか１項に記載の情報処理方法。
【請求項１５】
前記属性値が、前記プロセスのセキュリティレベルを示す属性値であり、且つ
前記プロセスのセキュリティレベルによる権限チェックを行い、特権命令を実行する権限があるときは特権命令を実行する特権命令実行制御ステップを有することを特徴とする請求項１０または請求項１１記載の情報処理方法。
【請求項１６】
前記属性値を変更するルールを保持するセキュリティレベル変更規則記憶手段を備え、
前記セキュリティレベル変更ステップにおいて、前記セキュリティレベル変更規則記憶手段に記憶されたルールに基づいて前記属性値を変更することを特徴とする請求項１０から請求項１５の何れか１項に記載の情報処理方法。
【請求項１７】
前記セキュリティレベル変更規則記憶手段には、前記属性値の変更前の属性値と変更後の属性値との組みが記憶され、
前記セキュリティレベル変更ステップにおいて、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスの前記属性値と等しい値の変更前の属性値と組みとなる変更後の属性値に変更することを特徴とする請求項１６に記載の情報処理方法。
【請求項１８】
前記セキュリティレベル変更規則記憶手段には、シグナルの値と前記属性値との組が記憶され、
前記セキュリティレベル変更ステップにおいて、前記プロセスの前記属性値を、前記セキュリティレベル変更規則記憶手段に記憶されている前記プロセスが受信したシグナルの値と組みとなる属性値に変更することを特徴とする請求項１６に記載の情報処理方法。
【請求項１９】
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、ＯＳの制御の下にプロセスを実行する情報処理装置に、
前記プロセスが前記第１の特定の命令を実行した際、前記プロセスの識別子と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避し、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、
前記プロセスが前記第２の特定の命令を実行した際、前記プロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラフック関数を、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻すシグナルハンドラ復帰処理と、
前記プロセスが前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、
前記シグナルハンドラ取得処理によるシグナルハンドラの取得後、前記プロセスの前記属性値を変更するセキュリティレベル変更処理と、
前記プロセスが前記第４の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させるプログラム。
【請求項２０】
シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ前記処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、前記シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、ＯＳの制御の下にプロセスを実行する情報処理装置に、
前記シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが前記第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組を前記シグナルハンドラ記憶手段に退避した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの識別子を前記他のプロセスの識別子を含むプロセス識別子群に追加するとともに、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記追加したプロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記シグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、
前記特定のプロセスが前記第２の特定の命令を実行した際、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていなければ、前記特定のプロセスの前記シグナルハンドラテーブルにおいて前記シグナルハンドラフック関数が設定されているシグナルハンドラを、前記シグナルハンドラ記憶手段に退避されている前記シグナルハンドラフック関数設定前の前記シグナルハンドラに戻した後、前記シグナルハンドラ記憶手段から前記特定のプロセスの識別子を含むプロセス識別子群と前記シグナルハンドラテーブルとの組のデータを削除し、前記他のプロセスの識別子を含むプロセス識別子群が前記シグナルハンドラ記憶手段に記憶されていれば、前記特定のプロセスの前記シグナルハンドラテーブルに設定されている前記シグナルハンドラを前記プロセス識別子群と組となる前記シグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、前記プロセス識別子群から前記特定のプロセスの識別子を削除するシグナルハンドラ復帰処理と、
前記プロセスが前記第３の特定の命令を実行した際、前記シグナルハンドラ記憶手段を参照し、前記プロセスの識別子及び前記プロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、
前記シグナルハンドラ取得処理によるシグナルハンドラの取得後に、前記プロセスの前記属性値を変更するセキュリティレベル変更処理と、
前記プロセスが前記第４の特定の命令を実行した際、前記プロセスの前記属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はアプリケーションプロセスのセキュリティレベルを変更する機能を有する情報処理装置に関し、特にシグナルハンドラを実行する際にアプリケーションプロセスのセキュリティレベルを変更する方法と装置に関する。
【背景技術】
【０００２】
近年、情報処理装置のセキュリティ確保を目的として、ＳＥ
Ｌｉｎｕｘのようにプロセス毎にセキュリティレベルを設定可能にしたセキュアＯＳが開発されている。また、特許文献１に記載されるように、アプリケーションプロセスのセキュリティレベルをそのプロセスの実行中に動的に変更することが行われている。ここで、セキュリティレベルとは、プロセスの属性の一つであり、当該プロセスが実行する命令やリソースに対するアクセス制御の判断に用いられる属性である。【０００３】
また、情報処理装置では、プロセスの実行中にシグナルが発生すると、そのプロセスによって登録されたシグナルハンドラが実行されるようになっている。ここで、シグナルとは、プロセス間通信であり、ユーザや他プロセスが特定のイベントを起こした際に、その発生したイベントに応じた種別のシグナルが当該プロセスに送られる。また、シグナルハンドラとは、各プロセスが用意するルーチンであり、受信したシグナルの種別に応じて該当するシグナルハンドラを実行する。受信したシグナルに該当するシグナルハンドラをプロセスが定義していない場合は、ＯＳが予め規定しておいた処理を実行する。このシグナルの種別とシグナルハンドラを組みとした集合をシグナルハンドラテーブルと呼び、プロセス毎に定義されている。シグナルが発生すると、ＯＳはシグナル送信先プロセスのシグナルハンドラテーブルを参照し、送信されたシグナルの種別と組みとなるシグナルハンドラの実行を開始する。この時、そのプロセスのそれまで行っていた処理は一時中断される。【０００４】
【特許文献１】特開２００１−２４９８４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
プロセス毎にセキュリティレベルを設定することのできるＯＳによれば、改ざんの恐れがないため、信頼性の高い関数をプロセスが実行する際に、そのプロセスのセキュリティレベルを高めることで、当該関数内での特権命令の実行が可能となる。逆に信頼性の低いルーチンをプロセスが実行する際にはそのプロセスのセキュリティレベルを変更して不正な処理を防止するといった制御が可能である。【０００６】
しかしながら、信頼性の高い関数の実行中にシグナルが発生し、プロセスに予め定義されたシグナルハンドラが実行される場合、セキュリティレベルが変更されずにシグナルハンドラが実行されていた。このため、シグナルハンドラの不測の処理によって関数の正常な実行が妨げられ、本来の処理を保証できず、場合によっては不正な処理を招いてしまう危険性があった。その理由は、シグナルによる関数の中断箇所およびシグナルハンドラ中で実行される特権命令の種類によっては、関数に定義された処理がその通りに正しく実行されない可能性があるためである。【０００７】
このような不正な処理を防止するためには、プロセスのセキュリティレベルを変更してシグナルハンドラを実行することである。しかし、前述したセキュアＯＳには、プロセスがシグナルハンドラの実行を開始する地点および終了する地点を検出し、プロセスのセキュリティレベルを変更する機能は存在しない。このため、シグナルハンドラ実行中に限りプロセスのセキュリティレベルを変更することができなかった。【０００８】
また、セキュリティレベルを変更して実行するシグナルハンドラは、シグナルハンドラによる不正な処理の影響を受ける区間を処理している最中に受信したシグナルによって実行されるシグナルハンドラだけ限定できれば都合がよい。その理由は、全てのシグナルハンドラを、セキュリティレベルを変更して実行すると、そのシグナルハンドラの処理が常に実行できない可能性があるため、セキュリティレベルを変更してのシグナルハンドラの実行は最低限に止めることが望まれるからである。しかし、シグナルハンドラを実行する際に、そのシグナルハンドラがプロセスのどの区間を処理している最中に受信したシグナルによって実行されるシグナルハンドラであるかを判定する仕組みは存在しなかった。このため、特定のシグナルハンドラの実行中に限りプロセスのセキュリティレベルを変更することはできなかった。【０００９】
［発明の目的］
本発明の目的は、シグナルハンドラを実行する際にプロセスのセキュリティレベルを変更し得るようにすることにある。【００１０】
また本発明の別の目的は、プロセスが特定の処理区間を実行している最中に受信したシグナルによって実行されるシグナルハンドラを検知し、この検知したシグナルハンドラをプロセスのセキュリティレベルを変更して実行することができようにすることにある。
【課題を解決するための手段】
【００１１】
本発明の第１の情報処理装置は、ＯＳの制御の下にプロセスを実行する情報処理装置であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、プロセスが第１の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、プロセスが第２の特定の命令を実行した際、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰手段と、プロセスが第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、シグナルハンドラ取得手段によるシグナルハンドラの取得後、プロセスの属性値を変更するセキュリティレベル変更手段と、プロセスが第４の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを含む。【００１２】
本発明の第２の情報処理装置は、ＯＳの制御の下にプロセスを実行する情報処理装置であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更手段と、特定のプロセスが第２の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰手段と、プロセスが第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得手段と、シグナルハンドラ取得手段によるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更手段と、プロセスが第４の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰手段とを含む。【００１３】
本発明の第１の情報処理方法は、情報処理装置にて、ＯＳの制御の下にプロセスを実行する情報処理方法であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、プロセスが第１の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、プロセスの実行中に受信したシグナルに対応するシグナルハンドラをシグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラがシグナルハンドラフック関数である場合、シグナルハンドラフック関数を呼び出すシグナル処理ステップと、プロセスがシグナルハンドラフック関数の第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更ステップと、プロセスがシグナルハンドラ取得ステップで取得したシグナルハンドラをシグナルハンドラフック関数において実行した後に第４の特定の命令を実行したときに、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰ステップと、プロセスが関数の第２の特定の命令を実行したときに、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰ステップとを含む。【００１４】
本発明の第２の情報処理方法は、情報処理装置にて、ＯＳの制御の下にプロセスを実行する情報処理方法であって、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を記憶装置に保持し、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更ステップと、プロセスの実行中に受信したシグナルに対応するシグナルハンドラをシグナルハンドラテーブルを参照して決定し、該決定したシグナルハンドラがシグナルハンドラフック関数である場合、シグナルハンドラフック関数を呼び出すシグナル処理ステップと、プロセスがシグナルハンドラフック関数の第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得ステップと、シグナルハンドラ取得ステップによるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更ステップと、特定のプロセスが第２の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、第１のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から第１のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、第２のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰ステップとを含む。【００１５】
本発明の第１のプログラムは、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、プロセスのシグナルハンドラテーブル、プロセスの属性値とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、ＯＳの制御の下にプロセスを実行する情報処理装置に、プロセスが第１の特定の命令を実行した際、プロセスの識別子とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、プロセスが第２の特定の命令を実行した際、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラフック関数を、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻すシグナルハンドラ復帰処理と、プロセスが第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、シグナルハンドラ取得処理によるシグナルハンドラの取得後、プロセスの属性値を変更するセキュリティレベル変更処理と、プロセスが第４の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させる。【００１６】
本発明の第１のプログラムは、シグナルハンドラの不測の処理によって正常な実行を妨げられる可能性のある処理区間の実行前に第１の特定の命令を実行し且つ処理区間の実行直後に第２の特定の命令を実行する関数、第３の特定の命令を実行し且つ第３の特定の命令によって取得したアドレスから始まるシグナルハンドラを実行し且つ該シグナルハンドラの実行後に第４の特定の命令を実行するシグナルハンドラフック関数、シグナルハンドラ、プロセスの属性値、複数のプロセスで共有されるシグナルハンドラテーブル、プロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組を退避するためのシグナルハンドラ記憶手段を保持する記憶装置を備え、ＯＳの制御の下にプロセスを実行する情報処理装置に、シグナルハンドラテーブルを共有する複数のプロセスのうちの特定のプロセスが第１の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組をシグナルハンドラ記憶手段に退避した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスの識別子を他のプロセスの識別子を含むプロセス識別子群に追加するとともに、シグナルハンドラテーブルに設定されているシグナルハンドラを追加したプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加した後、シグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更するシグナルハンドラ変更処理と、特定のプロセスが第２の特定の命令を実行した際、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていなければ、特定のプロセスのシグナルハンドラテーブルにおいてシグナルハンドラフック関数が設定されているシグナルハンドラを、シグナルハンドラ記憶手段に退避されているシグナルハンドラフック関数設定前のシグナルハンドラに戻した後、シグナルハンドラ記憶手段から特定のプロセスの識別子を含むプロセス識別子群とシグナルハンドラテーブルとの組のデータを削除し、他のプロセスの識別子を含むプロセス識別子群がシグナルハンドラ記憶手段に記憶されていれば、特定のプロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをプロセス識別子群と組となるシグナルハンドラ記憶手段中のシグナルハンドラテーブルに追加し、プロセス識別子群から特定のプロセスの識別子を削除するシグナルハンドラ復帰処理と、プロセスが第３の特定の命令を実行した際、シグナルハンドラ記憶手段を参照し、プロセスの識別子及びプロセスが受信したシグナルの種別と組みとなるシグナルハンドラを取得するシグナルハンドラ取得処理と、シグナルハンドラ取得処理によるシグナルハンドラの取得後に、プロセスの属性値を変更するセキュリティレベル変更処理と、プロセスが第４の特定の命令を実行した際、プロセスの属性値を変更前の属性値に変更するセキュリティレベル復帰処理を実行させる。
【発明の効果】
【００１７】
第１の効果は、シグナルハンドラの不測の処理によってプロセスの正常な実行が妨げられることを防止できることにある。【００１８】
その理由は、第１の特定の命令で呼び出されるシグナルハンドラ変更手段によって、プロセスのシグナルハンドラがシグナルハンドラフック関数に変更され、第２の特定の命令で呼び出されるシグナルハンドラ復帰手段によって、シグナルハンドラフック関数に変更されたシグナルハンドラを元の状態に戻すことで、第１の特定の命令が実行されてから第２の特定の命令が実行される間に実行されるシグナルハンドラのみがシグナルハンドラフック関数となり、この間を処理している最中に実行されるシグナルハンドラは、シグナルハンドラフック関数内の第３の特定の命令で呼び出されるセキュリティレベル変更手段によって、プロセスの属性値が変更され、プロセスの正常な実行が妨げられるような命令及びリソースへのアクセスが禁止された状態で、シグナルハンドラ変更手段によってシグナルハンドラフック関数に変更される前のシグナルハンドラを実行するからである。【００１９】
第２の効果は、本発明の実現のために、シグナルが発生してから、ＯＳがシグナル送信先のシグナルハンドラを実行する間の処理に対して変更を加える必要がないことにある。【００２０】
その理由は、第１の特定の命令で呼び出されるシグナルハンドラ変更手段によって、プロセスのシグナルハンドラをシグナルハンドラフック関数に変更し、シグナルハンドラフック関数内の第３の特定の命令で呼び出されるセキュリティレベル変更手段によって、シグナルハンドラの実行を検出し、プロセスの属性値を変更するからである。
【図面の簡単な説明】
【００２１】
【図１】本発明の情報処理装置のハードウェア構成例を示すブロック図である。
【図２】本発明の第１の実施の形態のブロック図である。
【図３】本発明の第１の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。
【図４】本発明の第１の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。
【図５】本発明の第１の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。
【図６】本発明の第１の実施の形態におけるセキュリティレベル復帰手段の処理例を示すフロー図である。
【図７】本発明の第１の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。
【図８】本発明の第２の実施の形態のブロック図である。
【図９】本発明の第２の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。
【図１０】本発明の第３の実施の形態のブロック図である。
【図１１】本発明の第３の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。
【図１２】本発明の第３の実施の形態におけるセキュリティレベル変更手段の処理例を示すフロー図である。
【図１３】本発明の第４の実施の形態のブロック図である。
【図１４】本発明の第４の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。
【図１５】本発明の第４の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。
【図１６】本発明の第４の実施の形態におけるシグナルハンドラ変更手段の処理例を示すフロー図である。
【図１７】本発明の第４の実施の形態におけるシグナルハンドラ取得手段の処理例を示すフロー図である。
【図１８】本発明の第４の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。
【図１９】本発明の第４の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。
【図２０】本発明の第４の実施の形態におけるシグナルハンドラ復帰手段の処理例を示すフロー図である。
【図２１】本発明の第１の実施例のブロック図である。
【図２２】本発明の第１の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。
【図２３】本発明の第２の実施例のブロック図である。
【図２４】本発明の第２の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。
【図２５】本発明の第３の実施例のブロック図である。
【図２６】本発明の第３の実施例のシグナルハンドラテーブル及びデフォルトシグナルハンドラテーブルの説明図である。
【図２７】本発明の第４の実施例のブロック図である。
【図２８】本発明の第４の実施例のシグナルハンドラテーブルの説明図である。
【図２９】本発明の第４の実施例のデフォルトシグナルハンドラテーブルの説明図である。
【図３０】本発明の第４の実施例におけるプロセスの動作シーケンスを示す図である。
【発明を実施するための最良の形態】
【００２２】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。【００２３】
＜本発明の情報処理装置のハードウェア構成例＞
図１を参照すると、本発明の情報処理装置のハードウェア構成の一例は、ＣＰＵ１、ＲＯＭ２、ＲＡＭ３、表示部４、入力操作部５、ファイルシステム６およびこれらを相互に接続するバス７から構成されている。ＲＯＭ２は、読み取り専用のメモリであり、ＣＰＵ１で実行されるオペレーティングシステム（ＯＳ）、ライブラリ関数および固定データなどを記憶する。ＲＡＭ３は、読み書き可能なメモリであり、ＣＰＵ１で実行されるアプリケーションプロセスおよび可変データなどを一時的に記憶する。表示部４は、ＬＣＤなどで構成され、アプリケーション画面などを表示する。入力操作部５はキーボードなどで構成され、ユーザからのデータや指示を入力する。ファイルシステム６は、ハードディスクやＳＤカードなどで構成され、アプリケーションプログラムや各種データを記憶する。このようなハードウェア構成を有する情報処理装置の例としては、パーソナルコンピュータなどの一般的なコンピュータ、ゲーム端末、携帯電話などがある。【００２４】
＜第１の実施の形態＞
図２を参照すると、本発明の第１の実施の形態は、記憶装置１１００、ＯＳ１１１０、プロセス１１２０を含んで構成される。【００２５】
記憶装置１１００は、プロセス１１２０のセキュリティレベルを表す属性値１１０１、シグナルの値１１０２およびシグナルハンドラテーブル１１０３を記憶する。また、シグナルハンドラテーブル１１０３の退避域となるシグナルハンドラ記憶手段１１０４、属性値１１０１の退避域となるセキュリティレベル記憶手段１１０５を有する。【００２６】
シグナルハンドラ記憶手段１１０４は、プロセスの識別子とシグナルハンドラテーブル１１０３とを組みとして記憶する。このシグナルハンドラ記憶手段１１０４に退避されているシグナルハンドラテーブル１１０３を、退避前のシグナルハンドラテーブル１１０３と区別するために、デフォルトシグナルハンドラテーブルと呼ぶ。【００２７】
セキュリティレベル記憶手段１１０５は、プロセスの識別子とそのプロセスの属性値とを組みとして記憶する。【００２８】
プロセス１１２０は、関数１１２５、シグナルハンドラフック関数１１２６およびシグナルハンドラ１１２７を含む。【００２９】
プロセス１１２０の関数１１２５は、改ざんの恐れがない信頼性の高い関数であり、実行を保証する部分１１２８を有する。また関数１１２５は、実行を保証する部分１１２８を実行する直前の箇所に第１の特定の命令１１２１が挿入され、実行を保証する部分１１２８の実行直後の箇所に第２の特定の命令１１２２が挿入されている。【００３０】
シグナルハンドラフック関数１１２６は、その実行開始直後の箇所に第３の特定の命令１１２３が挿入され、その実行終了直前の箇所に第４の特定の命令１１２４が挿入されている。また、第３の特定の命令１１２３の実行によって取得されたアドレスのシグナルハンドラ１１２７を実行する命令１１２９が、第３の特定の命令１１２３と第４の特定の命令１１２４の間の区間に挿入されている。【００３１】
シグナルハンドラ１１２７には、特権命令１１３０が含まれている。【００３２】
ＯＳ１１１０は、例えば、プロセス毎にセキュリティレベルを設定可能なセキュアＯＳである。【００３３】
ＯＳ１１１０は、例えば、プロセス毎にセキュリティレベルを設定可能なセキュアＯＳである。ＯＳ１１１０は、プロセス１１２０の実行と、プロセス１１２０の属性値１１０１を管理している。属性値１１０１は、プロセスが実行する特権命令やリソース制御へのアクセスの可否の判断に用いられる属性値である。また、プロセス間通信の機能としてシグナルを管理し、プロセス１１２０に対するシグナル１１３１が発生すると、シグナル処理手段１１１６を呼び出す機能を備える。さらに、第１の特定の命令１１２１によってシグナルハンドラ変更手段１１１１を呼び出す機能、第２の特定の命令１１２２によってシグナルハンドラ復帰手段１１１２を呼び出す機能、第３の特定の命令１１２３によってシグナルハンドラ取得手段１１１３を呼び出す機能、第４の特定の命令１１２４によってセキュリティレベル復帰手段１１１５を呼び出す機能、特権命令１１３０によって特権命令実行制御手段１１１７を呼び出す機能を備える。また、シグナルハンドラ取得手段１１１３に挿入された命令１１１８によってセキュリティレベル変更手段１１１４を呼び出す機能を備える。【００３４】
シグナルハンドラ変更手段１１１１は、プロセス１１２０の関数１１２５が第１の特定の命令１１２１を実行した際に呼び出され、プロセス１１２０の識別子とシグナルハンドラテーブル１１０３を組にして、シグナルハンドラ記憶手段１１０４に退避させ、元のシグナルハンドラテーブル１１０３に設定されているシグナルハンドラをシグナルハンドラフック関数１１２６に変更する機能を有する。【００３５】
シグナル処理手段１１１６は、シグナル１１３１が発生したプロセス１１２０のシグナルハンドラテーブル１１０３を参照し、発生したシグナル１１３１に対応して設定されている関数（シグナルハンドラ１１２７の場合とシグナルハンドラフック関数１１２６の場合とがある）を実行する機能を有する。関数を実行する際には、発生したシグナル１１３１の値をその関数に渡す。【００３６】
シグナルハンドラ取得手段１１１３は、プロセス１１２０がシグナル１１３１を受信したことで実行されたシグナルハンドラフック関数１１２６において、受信したシグナル１１３１の値を引数として実行する第３の特定の命令１１２３によって呼び出され、シグナルハンドラ記憶手段１１０４中のプロセス１１２０の識別子と組みとなるデフォルトシグナルハンドラテーブルからシグナル１１３１に対応するシグナルハンドラを取得し、命令１１１８によってセキュリティレベル変更手段１１１４を呼び出して、このセキュリティレベル変更手段１１１４の処理が終了した後に、前記取得したシグナルハンドラをシグナルハンドラフック関数１１２６に渡す機能を有する。【００３７】
セキュリティレベル変更手段１１１４は、シグナルハンドラ取得手段１１１３中の命令１１１８によって呼び出され、プロセス１１２０の識別子とその属性値１１０１の組をセキュリティレベル記憶手段１１０５に退避した後、プロセス１１２０の元の属性値１１０１を変更する機能を有する。【００３８】
セキュリティレベル復帰手段１１１５は、シグナルハンドラフック関数の第４の特定の命令１１２４によって呼び出され、プロセス１１２０の属性値１１０１を、セキュリティレベル記憶手段１１０５に退避されているプロセス１１２０の識別子と組みとなる属性値に変更し、セキュリティレベル記憶手段１１０５に記憶されているプロセス１１２０の識別子と属性値の組みを削除する機能を有する。【００３９】
シグナルハンドラ復帰手段１１１２は、プロセス１１２０の関数１１２５が第２の特定の命令１１２２を実行した際に呼び出され、プロセス１１２０のシグナルハンドラテーブル１１０３にシグナルハンドラとして設定されているシグナルハンドラフック関数１１２６を、シグナルハンドラ記憶手段１１０４に退避されているプロセス１１２０の識別子と組みとなるデフォルトシグナルハンドラテーブルに設定されているシグナルハンドラに戻し、シグナルハンドラ記憶手段１１０４に退避されているプロセス１１００の識別子とデフォルトシグナルハンドラテーブルの組みを削除する機能を有する。【００４０】
特権命令実行制御手段１１１７は、プロセス１１２０が特権命令１１３０を実行した際に呼び出され、プロセス１１２０の属性値１１０１に基づいて特権命令１１３０の実行可否を制御する機能を有する。【００４１】
次に、本実施の形態の全体の動作について詳細に説明する。【００４２】
プロセス１１２０が関数１１２５を呼び出すと、関数１１２５に配置された第１の特定の命令１１２１が実行され、シグナルハンドラ変更手段１１１１が呼び出される。【００４３】
図３を参照すると、シグナルハンドラ変更手段１１１１は、まず、プロセス１１２０の識別子と組にしてシグナルハンドラテーブル１１０３を、デフォルトシグナルハンドラテーブルとしてシグナルハンドラ記憶手段１１０４に記憶（退避）する（ステップＡ１）。次に、シグナルハンドラ変更手段１１１１は、シグナル探索番号ｉを初期値０に設定する（ステップＡ２）。次に、プロセス１１２０のシグナルハンドラテーブル１１０３のシグナルの値ｉのシグナルに対応して設定されているシグナルハンドラを参照し（ステップＡ３）、そのシグナルハンドラがプロセス１１２０が設定したシグナルハンドラであった場合（ステップＡ４のＹＥＳ）、シグナルの値ｉのシグナルに対応するシグナルハンドラとしてシグナルハンドラフック関数１１０３を設定する（ステップＡ５）。そして、シグナル探索番号ｉに１をプラスする（ステップＡ６）。シグナルの値ｉのシグナルに対応してプロセス１１２０のシグナルハンドラが設定されていない場合（ステップＡ４でＮＯ）、ステップＡ５をスキップし、シグナル探索番号ｉに１をプラスする（ステップＡ６）。【００４４】
次に、シグナルハンドラ変更手段１１１１は、更新後のシグナル探索番号ｉが、ＯＳ１１１０が管理するシグナル番号の最大値Ｓより大きい値であれば（ステップＡ７のＹＥＳ）、シグナルハンドラ変更処理を終える。これにより、第１の特定の命令１１２１の実行が終了し、プロセス１１２０の関数１１２５の処理が再開される。他方。更新後のシグナル探索番号ｉが、Ｓと等しい値または小さい値であれば（ステップＡ７のＮＯ）、ステップＡ３に戻り、上述した処理と同様の処理を繰り返す。【００４５】
次に、関数１１２５を実行しているプロセス１１２０が、第１の特定の命令１１２１の実行が終了した後に、シグナル１１３１を受信したとする。すると、ＯＳ１１１０により関数１１２５の実行が中断され、シグナル処理手段１１１６が実行される。シグナル処理手段１１１６は、プロセス１１２０のシグナルハンドラテーブル１１０３からシグナル１１３１の値に対応するシグナルハンドラを取り出し、それに制御を移す。今の場合、プロセス１１２０のシグナルハンドラテーブル１１０３にはシグナル１１３１に対応してシグナルハンドラフック関数１１２６が登録されているので、シグナルハンドラフック関数１１２６が実行されることになる。このとき、シグナル処理手段１１１６からシグナルハンドラフック関数１１２６にシグナル１１３１の値が渡される。【００４６】
シグナルハンドラフック関数１１２６は、受信したシグナル１１３１の値を引数として第３の特定の命令１１２３を実行する。この第３の特定の命令１１２３の実行により、シグナルハンドラ取得手段１１１３が呼び出される。【００４７】
図４を参照すると、シグナルハンドラ取得手段１１１３は、第３の特定の命令１１２３の引数であるシグナル１１３１の値を取得する（ステップＢ１）。次に、シグナルハンドラ記憶手段１１０４を参照し、自プロセス１１２０の識別子と組みとなるデフォルトシグナルハンドラテーブルを参照し（ステップＢ２）、シグナル１１３１の値に対応して設定されているシグナルハンドラ１１２７を取得する（ステップＢ３）。次に、命令１１１８を実行することにより、プロセス１１２０の識別子を通知してセキュリティレベル変更手段１１１４を呼び出し（ステップＢ４）、セキュリティレベル変更完了信号をセキュリティレベル変更手段１１１４から受信するまで待ち合わせる（ステップＢ５）。【００４８】
図５を参照すると、セキュリティレベル変更手段１１１４は、シグナルハンドラ取得手段１１１３から呼び出されると、プロセス１１２０の識別子とその属性値１１０１の組をセキュリティレベル記憶手段１１０５に記憶（退避）させる（ステップＣ１）。次に、プロセス１１２０の属性値１１０１を変更し（ステップＣ２）、シグナルハンドラ取得手段１１１３にセキュリティレベル変更完了信号を送信し（ステップＣ３）、処理を終了する。ここで、プロセス１１２０の変更前の属性値１１０１の値をＮx、変更後の値をＮyと記す。変更後の値Ｎyは特権命令を実行することができないセキュリティレベルを示すものとする。【００４９】
シグナルハンドラ取得手段１１１３は、セキュリティレベル変更完了信号を受信すると、ステップＢ３においてシグナルハンドラ記憶手段１１０４より取得したシグナルハンドラ１１２７をシグナルハンドラフック関数１１２６に渡し（ステップＢ６）、処理を終了する。【００５０】
シグナルハンドラフック関数１１２６は、第３の特定の命令１１２３を通じてシグナルハンドラ取得手段１１１３より取得したシグナルハンドラ１１２７を実行する。このシグナルハンドラ１１２７の実行過程で、シグナルハンドラ１１２７に挿入された特権命令１１３０が実行されると、制御が特権命令実行制御手段１１１７に移る。特権命令実行制御手段１１１７は、特権命令１１３０を実行したプロセス１１２０の属性値１１０１を参照し、特権命令を実行することができるセキュリティレベルかどうかを判定する。今の場合、属性値１１０１は特権命令を実行できない値Ｎyに変更されているため、特権命令１１３０は実行されない。他方、属性値１１０１がＮxである状況では、特許命令１１３０が実行されることになる。【００５１】
シグナルハンドラ１１２７の実行が終わると、シグナルハンドラフック関数１１２６は第４の特定の命令１１２４を実行する。第４の特定の命令１１２４が実行されると、プロセス１１２０の識別子を伴ってセキュリティレベル復帰手段１１１５が呼び出される。【００５２】
図６を参照すると、セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセス１１２０の識別子と組みとなる属性値Ｎxを取得する（ステップＤ１）。次に、セキュリティレベル記憶手段１１０５に記憶されているプロセス１１２０の識別子と属性値Ｎxの組みからなるデータを削除する（ステップＤ２）。そして、プロセス１１２０の属性値１１０２をＮyからＮxに変更する（ステップＤ３）。これで、セキュリティレベル復帰手段１１１５の処理が終了し、制御がシグナルハンドラフック関数１１２６に戻され、第４の特定の命令１１２４の実行が終了する。第４の特定の命令１１２４の実行が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、制御がシグナル処理手段１１１６を通じて関数１１２５に戻され、関数１１２５の処理が再開される。【００５３】
関数１１２５の処理が再開し、その関数１１２５に配置された第２の特定の命令１１２２が実行されると、プロセス１１２０の識別子を伴ってシグナルハンドラ復帰手段１１１２が呼び出される。【００５４】
図７を参照すると、シグナルハンドラ復帰手段１１１２は、シグナルハンドラ記憶手段１１０４を参照し、プロセス１１２０の識別子と組みとなるデフォルトシグナルハンドラテーブルを取得する（ステップＥ１）。次に、シグナルハンドラ復帰手段１１１２は、シグナル探索番号ｉを初期値０に設定する（ステップＥ２）。次に、プロセス１１２０のシグナルハンドラテーブル１１０３のシグナルの値ｉに対応して設定されているシグナルハンドラを参照する（ステップＥ３）。参照したシグナルハンドラがシグナルハンドラフック関数であった場合（ステップＥ４のＹＥＳ）、シグナルの値ｉに対応してデフォルトシグナルハンドラテーブルに登録されているシグナルハンドラをプロセス１１２０のシグナルハンドラとして設定する（ステップＥ５）。シグナルハンドラの設定の終了または参照したシグナルハンドラにシグナルハンドラフック関数が設定されていなかった場合（ステップＥ４のＮＯ）、シグナル探索番号ｉに１をプラスする（ステップＥ６）。シグナル探索番号ｉがその最大値Ｓより大きい値の場合（ステップＥ７のＹＥＳ）、シグナルハンドラ記憶手段１１０４に記憶されているプロセス１１２０の識別子とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する（ステップＥ８）。そして、第２の特定の命令１１２２の実行を終了し、関数１１２５の処理を続ける。シグナル探索番号ｉがＳと等しい値または小さい値の場合（ステップＥ７のＮＯ）、ステップＥ３に戻り、上述の処理と同様の処理を繰り返す。【００５５】
次に、本実施の形態の効果について説明する。【００５６】
本実施の形態によれば、同じシグナルハンドラ１１２７であっても、プロセス１１２０が特定の処理区間を実行している最中に受信したシグナルによって実行されるシグナルハンドラ１１２７とそれ以外のシグナルハンドラ１１２７とを論理的に区別し、前者のシグナルハンドラ１１２７についてはプロセス１１２０のセキュリティレベルを変更して実行することが可能となる。その理由は、プロセス１１２０が特定の処理区間を走行している間はシグナルハンドラをシグナルハンドラフック関数に変更することで、前者のシグナルハンドラの実行を検出し、セキュリティレベルを変更した上でシグナルハンドラを実行しているためである。【００５７】
＜第２の実施の形態＞
図８を参照すると、本発明の第２の実施の形態は、記憶装置１１００がセキュリティレベル変更規則記憶手段２００１を有すること、ＯＳ１１１０がセキュリティレベル変更手段１１１４に代えてセキュリティレベル変更手段２００２を有することで、図２に示した第１の実施の形態と相違する。【００５８】
セキュリティレベル変更規則記憶手段２００１は、プロセス１１２０の変更前の属性値と変更後の属性値との組を含む変更規則を予め記憶している。ここでは、プロセス１１２０の変更前の属性値１１０１をＮx、変更後の属性値をＮxxと記す。【００５９】
セキュリティレベル変更手段２００２は、シグナルハンドラ取得手段１１１３によって呼び出され、プロセス１１２０の識別子と属性値１１０１を取得し、セキュリティレベル記憶手段１１０５に組みとして記憶（退避）した後、セキュリティレベル変更規則記憶手段２００１を参照し、変更前の属性値１１０１と組みとなる変更後の属性値Ｎxxを取得し、プロセス１１２０の属性値１１０１をこの取得した属性値Ｎxxに変更する。【００６０】
次に、本実施の形態の全体の動作について説明する。本実施の形態の動作のうち、第１の実施の形態と相違する動作は、セキュリティレベル変更手段２００２の動作のみであるため、以下、セキュリティレベル変更手段２００２の動作を説明する。【００６１】
図９を参照すると、セキュリティレベル変更手段２００２は、シグナルハンドラ取得手段１１１３から呼び出されると、プロセス１１２０の識別子とその属性値１１０１の組をセキュリティレベル記憶手段１１０５に記憶（退避）させる（ステップＣ１１）。次に、セキュリティレベル変更規則記憶手段２００２を参照し、変更前の属性値１１０１（＝Ｎx）と組みとなる変更後の属性値Ｎxxを取得し（ステップＣ１２）、プロセス１１２０の属性値１１０１を取得した属性値Ｎxxに変更する（ステップＣ１３）。そして、シグナルハンドラ取得手段１１１３にセキュリティレベル変更完了信号を送信する（ステップＣ１４）。【００６２】
次に、本実施の形態の効果について説明する。【００６３】
本実施の形態によれば、第１の実施の形態の効果に加え、予め記憶しておいたセキュリティレベル変更規則により、プロセス１１２０のセキュリティレベルに応じてシグナルハンドラ実行時のプロセスのセキュリティレベルを変更することができる。【００６４】
＜第３の実施の形態＞
図１０を参照すると、本発明の第３の実施の形態は、記憶装置１１００がセキュリティレベル変更規則記憶手段３００１を有すること、ＯＳ１１１０がシグナルハンドラ取得手段１１１３およびセキュリティレベル変更手段１１１４に代えてシグナルハンドラ取得手段３００２およびセキュリティレベル変更手段３００３を有することで、図２に示した第１の実施の形態と相違する。【００６５】
セキュリティレベル変更規則記憶手段３００１は、プロセス１１２０が受信するシグナル１１３１の値とプロセス１１２０の属性値との組を含む変更規則を予め記憶している。ここでは、プロセス１１２０の変更前の属性値１１０１をＮx、シグナル１１３１の値に対応する属性値をＮxxと記す。【００６６】
シグナルハンドラ取得手段３００２は、プロセス１１２０がシグナル１１３１を受信したことで実行されたシグナルハンドラフック関数１１２６から、受信したシグナル１１３１の値を引数として実行する第３の特定の命令１１２３によって呼び出され、シグナルハンドラ記憶手段１１０４を参照し、プロセス１１２０の識別子と組みとなるシグナルハンドラテーブルからシグナル１１３１の値に対応するシグナルハンドラ１１２７を取得した後、セキュリティレベル変更手段３００３を呼び出してシグナル１１３１の値を渡し、セキュリティレベル変更手段３００３の処理が終了した後に、取得したシグナルハンドラ１１２７をシグナルハンドラフック関数１１２６に渡す。【００６７】
セキュリティレベル変更手段３００３は、シグナルハンドラ取得手段３００２によって呼び出され、シグナル１１３１の値を受け取ると、プロセス１１２０の識別子と属性値１１０１の組をセキュリティレベル記憶手段３１０５に記憶（退避）した後、セキュリティレベル変更規則記憶手段３００１を参照し、シグナル１１３１の値と組みとなる属性値Ｎxxを取得し、プロセス１１２０の属性値１１０１を属性値Ｎxxに変更する。【００６８】
次に、本実施の形態の全体の動作について説明する。本実施の形態の動作のうち、第１の実施の形態と相違する動作は、シグナルハンドラ取得手段３００２およびセキュリティレベル変更手段３００３の動作のみであるため、以下、シグナルハンドラ取得手段３００２およびセキュリティレベル変更手段２００２の動作を説明する。【００６９】
図１１を参照すると、シグナルハンドラ取得手段３００２は、シグナル１１３１の値を引数とする第３の特定の命令１１２３によってシグナルハンドラフック関数１１２６から呼び出されると、そのシグナル１１３１の値を取得する（ステップＢ１１）。次に、シグナルハンドラ記憶手段１１０４を参照し、プロセス１１２０の識別子と組みとなるデフォルトシグナルハンドラテーブルを参照し（ステップＢ１２）、シグナル１１３１の値に対応して設定されているシグナルハンドラ１１２７を取得する（ステップＢ１３）。次に、命令１１１８を実行することにより、プロセス１１２０の識別子およびシグナル１１３１の値を通知してセキュリティレベル変更手段３００３を呼び出し（ステップＢ１４）、セキュリティレベル変更完了信号をセキュリティレベル変更手段３００３から受信するまで待ち合わせる（ステップＢ１５）。【００７０】
図１２を参照すると、セキュリティレベル変更手段３００３は、シグナルハンドラ取得手段１１１３から呼び出されると、シグナル１１３１の値を取得し（ステップＣ２１）、プロセス１１２０の識別子とその属性値１１０１の組をセキュリティレベル記憶手段１１０５に記憶（退避）させる（ステップＣ２２）。次に、セキュリティレベル記憶手段１１０５に、プロセス１１２０の識別子と属性値１１０１の組を記憶（退避）させる（ステップＣ２２）。次に、セキュリティレベル変更規則記憶手段３００１を参照し、シグナルハンドラ取得手段３００２より取得したシグナル１１３１の値と組みとなる属性値Ｎxxを取得し（ステップＣ２３）、プロセス１１３１の属性値１１０１を取得した属性値Ｎxxに変更する（ステップＣ２４）。そして、シグナルハンドラ取得手段３００２にセキュリティレベル変更完了信号を送信する（ステップＣ２５）。【００７１】
シグナルハンドラ取得手段３００２は、セキュリティレベル変更完了信号を受信すると、ステップＢ１３においてシグナルハンドラ記憶手段１１０４より取得したシグナルハンドラ１１２７をシグナルハンドラフック関数１１２６に渡し（ステップＢ１６）、処理を終了する。【００７２】
次に、本実施の形態の効果について説明する。【００７３】
本実施の形態によれば、第１の実施の形態の効果に加え、予め記憶しておいたセキュリティレベル変更規則により、シグナルハンドラ実行時のプロセスのセキュリティレベルを、発生したシグナル１１３１の値に応じて変更することができる。【００７４】
＜第４の実施の形態＞
図１３を参照すると、本発明の第４の実施の形態は、記憶装置１１００がシグナルハンドラテーブル１１０３およびシグナルハンドラ記憶手段１１０４に代えて共有シグナルハンドラテーブル４００１およびシグナルハンドラ記憶手段４００２を有すること、ＯＳ１１１０がシグナルハンドラ変更手段１１１１、シグナルハンドラ復帰手段１１１２およびシグナルハンドラ取得手段１１１３に代えてシグナルハンドラ変更手段４００３、シグナルハンドラ復帰手段４００４およびシグナルハンドラ取得手段４００５を有することで、図２に示した第１の実施の形態と相違する。【００７５】
共有シグナルハンドラテーブル４００１は、複数のプロセス１１２０で共有されるシグナルハンドラテーブルである。本実施の形態の場合、ＯＳ１１１０は、シグナルハンドラテーブルを共有しているプロセスを管理している。【００７６】
シグナルハンドラ記憶手段４００２は、共有シグナルハンドラテーブル４００１を退避する記憶手段である。第１の実施の形態のシグナルハンドラ記憶手段１１０４は、１つのプロセス１１２０の識別子とシグナルハンドラテーブルの組を記憶したが、本実施の形態のシグナルハンドラ記憶手段４００２は、プロセスの識別子群と共有シグナルハンドラテーブル４００１を組みとして記憶する。ここで、プロセスの識別子群とは、１以上のプロセス識別子で、組みとなる共有シグナルハンドラテーブル４００１を共有しているプロセスのプロセス識別子からなる集合である。【００７７】
シグナルハンドラ変更手段４００３は、プロセス１１２０の関数１１２５が第１の特定の命令１１２１を実行した際に呼び出されると、自プロセス１１２０と共有シグナルハンドラテーブル４００１を共有している他のプロセスがあり且つ当該他のプロセスの識別子がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されていれば、そのプロセス識別子群に自プロセス１１２０のプロセス識別子を追加し、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルに、自プロセス１１２０の共有シグナルハンドラテーブル４００１に設定されているシグナルハンドラフック関数１１２６以外のシグナルハンドラを記憶（退避）する。そして、自プロセス１１２０の共有シグナルハンドラテーブル４００１に設定されているシグナルハンドラをシグナルハンドラフック関数１１２６に変更する。【００７８】
他方、自プロセス１１２０と共有シグナルハンドラテーブル４００１を共有している他のプロセスがない場合、またはそのような他のプロセスがあっても、他のプロセスの識別子がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されていない場合、シグナルハンドラ変更手段４００３は、プロセス１１２０の識別子をプロセス識別子群として、また共有シグナルハンドラテーブル４００１をデフォルトシグナルハンドラテーブルとして、シグナルハンドラ記憶手段４００２に記憶（退避）し、プロセス１１２０の共有シグナルハンドラテーブル４００１に設定されているシグナルハンドラをシグナルハンドラフック関数１１２６に変更する。【００７９】
シグナルハンドラ復帰手段４００４は、プロセス１１２０の関数１１２５が第２の特定の命令１１２２を実行した際に呼び出されると、プロセス１１２０のプロセス識別子を含むシグナルハンドラ記憶手段４００２中のプロセス識別子群を参照し、プロセス１１２０以外のプロセス識別子が存在した場合、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルに、プロセス１１２０の共有シグナルハンドラテーブル４００１に設定されているシグナルハンドラフック関数１１２６以外のシグナルハンドラを記憶（退避）する。そして、そのプロセス識別子群からプロセス１１２０の識別子を削除する。【００８０】
他方、プロセス識別子群にプロセス１１２０の識別子以外のプロセス識別子が存在しない場合、シグナルハンドラ復帰手段４００４は、プロセス１１２０の共有シグナルハンドラテーブル４００１にシグナルハンドラとして設定されているシグナルハンドラフック関数１１２６を、シグナルハンドラ記憶手段４００２にプロセス１１２０の識別子を含むプロセス識別子群と組にして記憶されているデフォルトシグナルハンドラテーブルに設定されているシグナルハンドラに変更する。そして、シグナルハンドラ記憶手段４００２に記憶されているプロセス１１２０の識別子を含むプロセス識別子群とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する。【００８１】
シグナルハンドラ取得手段４００５は、シグナルハンドラ取得手段１１１３とほぼ同様の手段である。すなわち、シグナルハンドラ取得手段４００５は、プロセス１１２０がシグナル１１３１を受信したことで実行されたシグナルハンドラフック関数１１２６において、受信したシグナル１１３１の値を引数として実行する第３の特定の命令１１２３によって呼び出され、シグナルハンドラ記憶手段４００２中のプロセス１１２０の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルからシグナル１１３１に対応するシグナルハンドラを取得し、命令１１１８によってセキュリティレベル変更手段１１１４を呼び出して、このセキュリティレベル変更手段１１１４の処理が終了した後に、前記取得したシグナルハンドラをシグナルハンドラフック関数１１２６に渡す機能を有する。【００８２】
次に、本実施の形態の全体の動作を説明する。本実施の形態の動作のうち、第１の実施の形態と相違する動作は、シグナルハンドラ変更手段４００３、シグナルハンドラ復帰手段４００４およびシグナルハンドラ取得手段４００５の動作のみであるため、以下、シグナルハンドラ変更手段４００３、シグナルハンドラ復帰手段４００４およびシグナルハンドラ取得手段４００５の動作を説明する。【００８３】
プロセス１１２０が関数１１２５を呼び出し、その関数１１２５に配置された第１の特定の命令１１２１が実行されると、シグナルハンドラ変更手段４００３が呼び出される。【００８４】
図１４〜図１６を参照すると、シグナルハンドラ変更手段４００３は、プロセス１１２０と共有シグナルハンドラテーブル４００１を共有している他のプロセスがある場合（ステップＡ１１のＹＥＳ）、当該他のプロセスの識別子がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されているかを判断する（ステップＡ１２）。シグナルハンドラ記憶手段４００２のプロセス識別子群に、プロセス１１２０と共有シグナルハンドラテーブル４００１を共有している他のプロセスの識別子が記憶されている場合（ステップＡ１２のＹＥＳ）、そのプロセス識別子群にプロセス１１２０のプロセス識別子を追加する（ステップＡ１３）。【００８５】
次にシグナルハンドラ変更手段４００３は、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照する（ステップＡ１４）。次に、シグナル探索番号ｉを初期値０に設定する（ステップＡ１５）。次に、プロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応して設定されているシグナルハンドラを参照し（ステップＡ１６）、参照したシグナルハンドラにシグナルハンドラフック関数１１２６以外のシグナルハンドラが設定されている場合（ステップＡ１７のＹＥＳ）、そのシグナルハンドラをデフォルトシグナルハンドラテーブルのシグナルの値ｉに対応するシグナルハンドラとして記憶（退避）し（ステップＡ１８）、プロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応するシグナルハンドラとして、シグナルハンドラフック関数１１２６を設定する（ステップＡ１９）。そして、シグナル探索番号ｉに１をプラスする（ステップＡ２０）。また、参照したシグナルハンドラにシグナルハンドラフック関数１１２６以外のシグナルハンドラが設定されていなければ（ステップＡ１７のＮＯ）、ステップＡ１８、Ａ１９をスキップして、シグナル探索番号ｉに１をプラスする（ステップＡ２０）。【００８６】
次にシグナルハンドラ変更手段４００３は、シグナル探索番号ｉがシグナルの数の最大値Ｓより大きい値の場合（ステップＡ２１のＹＥＳ）、処理を終了する。これにより、第１の特定の命令１１２１の実行が終了し、関数１１２５の処理が再開される。他方、シグナル探索番号ｉがＳと等しい値または小さい値の場合（ステップＡ２１のＮＯ）、ステップＡ１６に戻り、上述した処理と同様の処理を繰り返す。【００８７】
また、プロセス１１２０と共有シグナルハンドラテーブルを共有している他のプロセスがない場合（ステップＡ１１のＮＯ）、またはあっても当該他のプロセスの識別子がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されていない場合（ステップＡ１２のＮＯ）、シグナルハンドラ変更手段４００３は、プロセス１１２０の識別子を含むプロセス識別子群と共有シグナルハンドラテーブル４００１とを組にしてシグナルハンドラ記憶手段４００２に記憶（退避）する（ステップＡ２２）。【００８８】
次にシグナルハンドラ変更手段４００３は、シグナル探索番号ｉを初期値０に設定する（ステップＡ２３）。次に、プロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応して設定されているシグナルハンドラを参照し（ステップＡ２４）、この参照したシグナルハンドラがプロセス１１２０が設定したシグナルハンドラであれば（ステップＡ２５のＹＥＳ）、シグナルの値ｉに対応するシグナルハンドラとしてシグナルハンドラフック関数１１２６に変更する（ステップＡ２６）。そして、シグナル探索番号ｉに１をプラスする（ステップＡ２７）。参照したシグナルハンドラがプロセス１１２０が設定したシグナルハンドラでなければ（ステップＡ２５でＮＯ）、ステップＡ２６をスキップし、シグナル探索番号ｉに１をプラスする（ステップＡ２７）。【００８９】
次にシグナルハンドラ変更手段４００３は、シグナル探索番号ｉがＳより大きい値の場合（ステップＡ２８のＹＥＳ）、処理を終了する。これにより第１の特定の命令１１２１の実行が終了し、関数１１２５の処理が再開される。他方、シグナル探索番号ｉがＳと等しい値または小さい値の場合（ステップＡ２８のＮＯ）、ステップＡ２４に戻り、上述した処理と同様の処理を繰り返す。【００９０】
ここで、関数１１２５を実行しているプロセス１１２０が、第１の特定の命令１１２１の実行が終了した後に、シグナルハンドラフック関数１１２６がシグナルハンドラとして設定されているシグナル１１３１を受信したとする。すると、ＯＳ１１１０により関数１１２５の実行が中断され、シグナル処理手段１１１６を通じてシグナルハンドラフック関数１１２６が実行される。そして、シグナルハンドラフック関数１１２６では、受信したシグナル１１３１の値を引数として第３の特定の命令１１２３が実行され、これによりシグナルハンドラ取得手段４００５が呼び出される。【００９１】
図１７を参照すると、シグナルハンドラ取得手段４００５は、第３の特定の命令１１２３の引数であるシグナル１１３１の値を取得する（ステップＢ２１）。次に、シグナルハンドラ記憶手段４００２から、自プロセス１１２０の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照し（ステップＢ２２）、シグナル１１３１の値に対応して設定されているシグナルハンドラ１１２７を取得する（ステップＢ２３）。次に、命令１１１８を実行することにより、プロセス１１２０の識別子を通知してセキュリティレベル変更手段１１１４を呼び出し（ステップＢ２４）、セキュリティレベル変更完了信号をセキュリティレベル変更手段１１１４から受信するまで待ち合わせる（ステップＢ２５）。【００９２】
図５を参照して説明したように、セキュリティレベル変更手段１１１４は、シグナルハンドラ取得手段４００５から呼び出されると、プロセス１１２０の識別子とその属性値１１０１の組をセキュリティレベル記憶手段１１０５に記憶（退避）させ（ステップＣ１）、プロセス１１２０の属性値１１０１を変更し（ステップＣ２）、シグナルハンドラ取得手段４００５にセキュリティレベル変更完了信号を送信し（ステップＣ３）、処理を終了する。ここで、本実施の形態の変形例として、セキュリティレベル変更手段１１１４は、プロセス１１２０の識別子が、シグナルハンドラ記憶手段４００２中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれている場合に限って（つまり当該プロセスが関数１１２５の第１の特定の命令１１２１を実行し、第２の特定の命令１１２２を実行していない状態）、プロセス１１２０の属性値１１０１を変更するようにしても良い。【００９３】
シグナルハンドラ取得手段４００５は、セキュリティレベル変更完了信号を受信すると、ステップＢ２３においてシグナルハンドラ記憶手段４００２より取得したシグナルハンドラ１１２７をシグナルハンドラフック関数１１２６に渡し（ステップＢ２６）、処理を終了する。【００９４】
シグナルハンドラフック関数１１２６は、第３の特定の命令１１２３を通じてシグナルハンドラ取得手段４００５より取得したシグナルハンドラ１１２７を実行する。このシグナルハンドラ１１２７の実行過程で、シグナルハンドラ１１２７に挿入された特権命令１１３０が実行されると、制御が特権命令実行制御手段１１１７に移る。特権命令実行制御手段１１１７は、特権命令１１３０を実行したプロセス１１２０の属性値１１０１を参照し、特権命令を実行することができるセキュリティレベルかどうかを判定する。【００９５】
シグナルハンドラ１１２７の実行が終わると、シグナルハンドラフック関数１１２６は第４の特定の命令１１２４を実行する。第４の特定の命令１１２４が実行されると、プロセス１１２０の識別子を伴ってセキュリティレベル復帰手段１１１５が呼び出される。【００９６】
図６を参照して既に説明したように、セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセス１１２０の識別子と組みとなる属性値を取得する（ステップＤ１）。次に、セキュリティレベル記憶手段１１０５に記憶されているプロセス１１２０の識別子と属性値の組みからなるデータを削除する（ステップＤ２）。そして、プロセス１１２０の属性値１１０１を元の属性値に戻す（ステップＤ３）。【００９７】
ここで、本実施の形態の変形例として、セキュリティレベル変更手段１１１４は、プロセス１１２０の識別子が、シグナルハンドラ記憶手段４００２中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれていなければ、プロセス１１２０の属性値１１０１を元に戻す処理を実行せずに終了するようにしても良い。【００９８】
セキュリティレベル復帰手段１１１５の処理が終了し、制御がシグナルハンドラフック関数１１２６に戻されると、第４の特定の命令１１２４の実行が終了する。第４の特定の命令１１２４の実行が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、制御がシグナル処理手段１１１６を通じて関数１１２５に戻され、関数１１２５の処理が再開される。そして、関数１１２５の処理が再開し、その関数１１２５に配置された第２の特定の命令１１２２が実行されると、プロセス１１２０の識別子を伴ってシグナルハンドラ復帰手段４００４が呼び出される。【００９９】
図１８〜図２０を参照すると、シグナルハンドラ復帰手段４００４は、プロセス１１２０のプロセス識別子を含むプロセス識別子群をシグナルハンドラ記憶手段４００２中から参照し（ステップＥ１１）、そのプロセス識別子群にプロセス１１２０以外の他のプロセスの識別子が存在した場合（ステップＥ１２のＹＥＳ）、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを参照する（ステップＥ１３）。次に、シグナル探索番号ｉを初期値０に設定し（ステップＥ１４）、プロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応するシグナルハンドラを参照する（ステップＥ１５）。【０１００】
参照したシグナルハンドラにシグナルハンドラフック関数１１２６以外のシグナルハンドラが設定されている場合（ステップＥ１６のＹＥＳ）、シグナルハンドラ復帰手段４００４は、そのシグナルハンドラをデフォルトシグナルハンドラテーブルのシグナルの値ｉに対応するシグナルハンドラとしてシグナルハンドラ記憶手段４００２に記憶（退避）する（ステップＥ１７）。次に、参照しているプロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応するシグナルハンドラとして、シグナルハンドラフック関数１１２６を設定する（ステップＥ１８）。そして、シグナル探索番号ｉに１をプラスする（ステップＥ１９）。他方、参照したシグナルハンドラにシグナルハンドラフック関数１１２６が設定されていない場合（ステップＥ１６のＮＯ）、ステップＥ１７、Ｅ１８の処理をスキップし、シグナル探索番号ｉに１をプラスする（ステップＥ１９）。【０１０１】
次にシグナルハンドラ復帰手段４００４は、シグナル探索番号ｉがシグナルの数の最大値Ｓより大きい値の場合（ステップＥ２０のＹＥＳ）、シグナルハンドラ記憶手段４００２に記憶されているプロセス識別子群からプロセス１１２０の識別子を削除する（ステップＥ２１）。そして、シグナルハンドラ復帰手段４００４の処理を終える。これにより、第２の特定の命令１１２２の実行が終了し、関数１１２５の処理が再開される。他方、シグナル探索番号ｉがＳと等しい値または小さい値の場合（ステップＥ２０のＮＯ）、ステップＥ１５に戻り、上述した処理と同様の処理を繰り返す。【０１０２】
また、プロセス識別子群にプロセス１１２０以外の他のプロセスの識別子が存在しない場合（ステップＥ１２のＮＯ）、シグナルハンドラ復帰手段４００４は、シグナルハンドラ記憶手段４００２に記憶されているプロセス１１２０の識別子を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルを取得する（ステップＥ２２）。次に、シグナルハンドラ復帰手段４００４は、シグナル探索番号ｉを初期値０に設定し（ステップＥ２３）、プロセス１１２０の共有シグナルハンドラテーブル４００１のシグナルの値ｉに対応して設定されているシグナルハンドラを参照する（ステップＥ２４）。【０１０３】
参照したシグナルハンドラがシグナルハンドラフック関数１１２６であった場合（ステップＥ２５のＹＥＳ）、シグナルハンドラ復帰手段４００４は、シグナルの値ｉに対応するシグナルハンドラとしてデフォルトシグナルハンドラテーブルに登録されているシグナルハンドラをシグナルハンドラ記憶手段４００２から読み出し、プロセス１１２０の共有シグナルハンドラテーブル４００１におけるシグナルの値ｉに対応するシグナルハンドラとして設定する（ステップＥ２６）。そして、シグナル探索番号ｉに１をプラスする（ステップＥ２７）。他方、参照したシグナルハンドラがシグナルハンドラフック関数１１２６でなかった場合（ステップＥ２５のＮＯ）、ステップＥ２６の処理をスキップし、シグナル探索番号ｉに１をプラスする（ステップＥ２７）。【０１０４】
次にシグナルハンドラ復帰手段４００４は、シグナル探索番号ｉがシグナルの数の最大値Ｓより大きい値の場合（ステップＥ２８のＹＥＳ）、シグナルハンドラ記憶手段４００２に記憶されているプロセス１１２０の識別子を含むプロセス識別子群とデフォルトシグナルハンドラテーブルの組みからなるデータを削除する（ステップＥ２９）。そして、シグナルハンドラ復帰手段４００４の処理を終える。これにより、第２の特定の命令１１２２の実行が終了し、関数１１２５の処理が再開される。他方、シグナル探索番号ｉがＳと等しい値または小さい値の場合（ステップＥ２８のＮＯ）、ステップＥ２４に戻って上述した処理と同様の処理を繰り返す。【０１０５】
次に、本実施の形態の効果について説明する。【０１０６】
本実施の形態によれば、シグナルハンドラテーブルのシグナルハンドラを変更する際に、そのシグナルハンドラテーブルを共有しているプロセスに関する処理を行うことで、シグナルハンドラテーブルを複数のプロセス間で共有する機能を持ったＯＳにも対応することができる。
【実施例１】
【０１０７】
次に、本発明の第１の実施例を、図２１及び図２２を参照して説明する。かかる実施例は本発明の第１の実施の形態に対応するものである。【０１０８】
本実施例では、プログラム制御により動作するコンピュータ上で、ＯＳ１１１０とプロセスＡとが動作する。【０１０９】
ＯＳ１１１０は、本実施例ではシグナルとして、シグナル０（シグナルの値０）と、シグナル１（シグナルの値１）と、シグナル２（シグナルの値２）を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナルの発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、ＯＳ１１１０は、セキュアＯＳの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Ｌｏｗ”（非特権レベル）と“Ｈｉｇｈ”（特権レベル）にセキュリティレベルを設定可能である。“Ｌｏｗ”となっているプロセスの属性値は１、“Ｈｉｇｈ”となっているプロセスの属性値は３と設定され、セキュリティレベル“Ｌｏｗ”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Ｈｉｇｈ”に設定されたプロセスは特権システムコールの実行に制限はない。このようなＯＳには、例えばＳＥ
Ｌｉｎｕｘがあるが、他の種類のＯＳであってもかまわない。【０１１０】
さらに、ＯＳ１１１０は、シグナルハンドラ変更手段１１１１と、シグナルハンドラ復帰手段１１１２と、シグナルハンドラ取得手段１１１３と、セキュリティレベル変更手段１１１４と、セキュリティレベル復帰手段１１１５と、シグナル処理手段１１１６と、特権命令実行制御手段１１１７と、シグナルハンドラ記憶手段１１０４と、セキュリティレベル記憶手段１１０５とを有する。さらに、ＯＳ１１１０は、システムコール命令として、第１の特定の命令としてシグナルハンドラ変更手段１１１１を呼び出すシステムコール１、第２の特定の命令としてシグナルハンドラ復帰手段１１１２を呼び出すシステムコール２、第３の特定の命令としてシグナルハンドラ取得手段１１１３を呼び出すシステムコール３、第４の特定の命令としてセキュリティレベル復帰手段１１１５を呼び出すシステムコール４を備える。セキュリティレベル変更手段１１１４は、プロセスの属性値を１（セキュリティレベル“Ｌｏｗ”）に変更する機能を有する。セキュリティレベル復帰手段１１１５は、プロセスの属性値を３（セキュリティレベル“Ｈｉｇｈ”）に戻す機能を有する。【０１１１】
プロセスＡは、関数１１２５と、シグナルハンドラフック関数１１２６と、シグナルハンドラＡs0と、シグナルハンドラＡs1とを含む。関数１１２５は、自関数で行われる処理のうち予め定められた特定の処理区間の実行前にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール１が実行され、自関数で行われる処理のうち前記特定の処理区間の実行後にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール２が実行されるようになっている。シグナルハンドラフック関数１１２６は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール３が配置され、関数の終了部分にシステムコール４が配置される。また、システムコール３の直後には、システムコール３によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラＡs0は、シグナル０がプロセスＡに送信された際に実行されるシグナルハンドラであり、シグナルハンドラＡs1はシグナル１がプロセスＡに送信された際に実行されるシグナルハンドラである。プロセスＡでは、シグナル２に対するシグナルハンドラは設定されていない。プロセスＡのシグナルハンドラテーブルを図２２の状態１に示す。また、プロセスＡの識別子は１、プロセスＡの属性値は３（セキュリティレベル“Ｈｉｇｈ”）である。【０１１２】
今、プロセスＡが関数１１２５を呼び出し、その関数１１２５に配置されたシステムコール１を、シグナルハンドラフック関数１１２６の開始アドレスを引数として実行する。システムコール１が実行されると、シグナルハンドラ変更手段１１１１が呼び出される。シグナルハンドラ変更手段１１１１では、プロセスＡの識別子１とプロセスＡのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段１１０４に記憶する。シグナルハンドラ記憶手段１１０４に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルＡと呼ぶ。デフォルトシグナルハンドラテーブルＡの内容を図２２に示す。【０１１３】
次にシグナルハンドラ変更手段１１１１は、シグナル探索番号を初期値０に設定する。ここでＯＳ１１１０は、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。そして、プロセスＡのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラＡs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数１１２６の開始アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＡのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１はシグナルハンドラＡs1の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数１１２６の開始アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＡのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、システムコール１の処理を終了する。この時のプロセスＡのシグナルハンドラテーブルを図２２の状態２に示す。【０１１４】
関数１１２５を実行しているプロセスＡが、システムコール１の実行を終了した後に、シグナル１を受信したとする。プロセスＡのシグナル１のシグナルハンドラにはシグナルハンドラフック関数１１２６が設定されているため、関数１１２５の実行が中断され、シグナルハンドラフック関数１１２６が実行される。そして、シグナルハンドラフック関数１１２６では、受信したシグナル１のシグナルの値１を引数としてシステムコール３を実行する。システムコール３が実行されると、シグナルハンドラ取得手段１１１３が呼び出される。【０１１５】
シグナルハンドラ取得手段１１１３は、シグナルハンドラ記憶手段１１０４から、プロセスＡの識別子１と組みとなるデフォルトシグナルハンドラテーブルＡを参照し、シグナルの値１と組みとなるシグナルハンドラＡs1の開始アドレスを取得する。そして、セキュリティレベル変更手段１１１４を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。【０１１６】
セキュリティレベル変更手段１１１４は、セキュリティレベル記憶手段１１０４に、プロセスＡの識別子１と属性値３とを組みとして記憶させる。そして、プロセスＡの属性値を１に変更し、シグナルハンドラ取得手段１１１３にセキュリティレベル変更完了信号を送信する。【０１１７】
シグナルハンドラ取得手段１１１３は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段１１０４より取得したシグナルハンドラＡs1の開始アドレスをシグナルハンドラフック関数１１２６に渡し、システムコール３の処理を終了する。【０１１８】
シグナルハンドラフック関数１１２６では、システムコール３を通じて取得したシグナルハンドラＡs1の開始アドレスを基に、シグナルハンドラＡs1を呼び出す。【０１１９】
シグナルハンドラＡs1の実行が終わると、シグナルハンドラフック関数１１２６はシステムコール４を実行する。システムコール４が実行されると、セキュリティレベル復帰手段１１１５が呼び出される。【０１２０】
セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセスＡの識別子１と組みとなる属性値３を取得する。次に、セキュリティレベル記憶手段１１０５に記憶されているプロセスＡの識別子１と属性値３の組みからなるデータを削除する。そして、プロセスＡの属性値を３に変更し、システムコール４の処理を終了する。システムコール４の処理が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、関数１１２５の処理が再開される。【０１２１】
関数１１２５の処理が再開し、その関数１１２５に配置されたシステムコール２がシグナルハンドラフック関数１１２６の先頭アドレスを引数として実行されると、シグナルハンドラ復帰手段１１１５が呼び出される。【０１２２】
シグナルハンドラ復帰手段１１１５は、シグナルハンドラ記憶手段１１０４を参照し、プロセスＡの識別子１と組みとなるデフォルトシグナルハンドラテーブルＡを取得する。次にシグナルハンドラ復帰手段１１１５は、シグナル探索番号を初期値０に設定する。ここでＯＳ１１１０は、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。次に、プロセスＡのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＡでシグナルの値０と組みとなるシグナルハンドラＡs0に変更する。次に、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＡのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１はシグナルハンドラフック関数の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＡでシグナルの値１と組みとなるシグナルハンドラＡs1に変更する。次に、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＡのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナル２にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段１１０４のプロセスＡの識別子１とデフォルトシグナルハンドラテーブルＡの組みからなるデータを削除し、システムコール２の処理を終了する。
【実施例２】
【０１２３】
次に、本発明の第２の実施例を、図２３及び図２４を参照して説明する。かかる実施例は本発明の第２の実施の形態に対応するものである。【０１２４】
本実施例は、コンピュータ上で動作するプロセスがプロセスＢである点と、ＯＳ１１１０がセキュリティレベル変更規則記憶手段２００１を有する点で、第１の実施例と相違する。また、ＯＳ１１１０は、本実施例ではシグナルとして、シグナル０（シグナルの値０）と、シグナル１（シグナルの値１）と、シグナル２（シグナルの値２）を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、ＯＳ１１１０は、セキュアＯＳの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Ｌｏｗ”（非特権レベル）と“Ｍｉｄ”（通常権限レベル）と“Ｈｉｇｈ”（特権レベル）にセキュリティレベルを設定可能であり、“Ｌｏｗ”となっているプロセスの属性値は１、“Ｍｉｄ”となっているプロセスの属性値は２、“Ｈｉｇｈ”となっているプロセスの属性値は３と設定され、セキュリティレベル“Ｌｏｗ”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Ｍｉｄ”に設定されたプロセスは幾つかの特権システムコールの実行のみが制限され、セキュリティレベル“Ｈｉｇｈ”に設定されたプロセスは特権システムコールの実行に制限はない。このようなＯＳには、例えばＳＥ
Ｌｉｎｕｘがあるが、他の種類のＯＳであってもかまわない。【０１２５】
さらに、セキュリティレベル変更規則記憶手段２００１は、図２４に示すような変更規則が記憶されている。【０１２６】
プロセスＢは、関数１１２５と、シグナルハンドラフック関数１１２６と、シグナルハンドラＢs0を含む。シグナルハンドラＢs0は、シグナル０がプロセスＢに送信された際に実行されるシグナルハンドラである。プロセスＢは、シグナル１およびシグナル２に対するシグナルハンドラは設定されていない。プロセスＢのシグナルハンドラテーブルを図２４の状態１に示す。また、プロセスＢの識別子は１、プロセスＢの属性値は３（セキュリティレベル“Ｈｉｇｈ”）である。【０１２７】
今、プロセスＢが関数１１２５を呼び出し、その関数に配置されたシステムコール１をシグナルハンドラフック関数１１２６の開始アドレスを引数として実行する。システムコール１が実行されると、シグナルハンドラ変更手段１１１１が呼び出される。【０１２８】
シグナルハンドラ変更手段１１１１は、プロセスＢの識別子１とプロセスＢのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段１１０４に記憶する。シグナルハンドラ記憶手段１１０４に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルＢと呼ぶ。その内容は図２４に示すようになっている。次に、シグナルハンドラ変更手段１１１１は、シグナル探索番号を初期値０に設定する。ここでＯＳ１１１０は、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。次に、プロセスＢのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラＢs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数１１２６の開始アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＢのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＢのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、システムコール１の処理を終了する。この時のプロセスＢのシグナルハンドラテーブルを図２４の状態２に示す。【０１２９】
関数１１２５を実行しているプロセスＢが、システムコール１の実行を終了した後に、シグナル０を受信したとする。プロセスＢのシグナル０のシグナルハンドラにはシグナルハンドラフック関数１１２６が設定されているため、関数１１２５の実行が中断され、シグナルハンドラフック関数１１２６が実行される。【０１３０】
シグナルハンドラフック関数１１２６は、受信したシグナル０のシグナルの値０を引数としてシステムコール３を実行する。システムコール３が実行されると、シグナルハンドラ取得手段１１１３が呼び出される。【０１３１】
シグナルハンドラ取得手段１１１３は、シグナルハンドラ記憶手段１１０４から、プロセスＢの識別子１と組みとなるデフォルトシグナルハンドラテーブルＢを参照し、シグナルの値０と組みとなるシグナルハンドラＢs0の開始アドレスを取得する。そして、セキュリティレベル変更手段２００２を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。【０１３２】
セキュリティレベル変更手段２００２は、セキュリティレベル記憶手段１１０５に、プロセスＢの識別子１と属性値３を組みとして記憶させる。そして、セキュリティレベル変更規則記憶手段２００１を参照し、変更前の属性値３（プロセスＢの属性値）と組みとなる属性値２を取得する。そして、プロセスＢの属性値を２に変更し、シグナルハンドラ取得手段１１１３にセキュリティレベル変更完了信号を送信する。【０１３３】
シグナルハンドラ取得手段１１１３は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段１１０４より取得したシグナルハンドラＢs0の開始アドレスをシグナルハンドラフック関数１１２６に渡し、システムコール３の処理を終了する。【０１３４】
シグナルハンドラフック関数１１２６は、システムコール３を通じて取得したシグナルハンドラＢs0の開始アドレスを基に、シグナルハンドラＢs0を呼び出す。そして、シグナルハンドラＢs0の実行が終わると、シグナルハンドラフック関数１１２６はシステムコール４を実行する。【０１３５】
システムコール４が実行されると、セキュリティレベル復帰手段１１１５が呼び出される。セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセスＢの識別子１と組みとなる属性値３を取得する。そして、セキュリティレベル記憶手段１１０５に記憶されているプロセスＢの識別子１と属性値３の組みからなるデータを削除する。そして、プロセスＢの属性値を３に変更し、システムコール４の処理を終了する。システムコール４の処理が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、関数１１２５の処理が再開される。【０１３６】
関数１１２５の処理が再開し、その関数に配置されたシステムコール２をシグナルハンドラフック関数１１２６の先頭アドレスを引数として実行する。システムコール２が実行されると、シグナルハンドラ復帰手段１１１２が呼び出される。【０１３７】
シグナルハンドラ復帰手段１１１２は、シグナルハンドラ記憶手段１１０４を参照し、プロセスＢの識別子１と組みとなるデフォルトシグナルハンドラテーブルＢを取得する。次に、シグナルハンドラ復帰手段１１１２は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。次に、プロセスＢのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数１１２６の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＢでシグナルの値０と組みとなるシグナルハンドラＢs0に変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＢのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＢのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段１１０４のプロセスＢの識別子１とデフォルトシグナルハンドラテーブルＢの組みからなるデータを削除し、システムコール２の処理を終了する。
【実施例３】
【０１３８】
次に、本発明の第３の実施例を、図２５及び図２６を参照して説明する。かかる実施例は本発明の第３の実施の形態に対応するものである。【０１３９】
本実施例は、コンピュータ上で動作するプロセスがプロセスＣである点と、ＯＳ１１１０がセキュリティレベル変更規則記憶手段３００１を有する点で、第１の実施例と相違する。また、ＯＳ１１１０は、本実施例ではシグナルとして、シグナル０（シグナルの値０）と、シグナル１（シグナルの値１）と、シグナル２（シグナルの値２）を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。さらに、ＯＳ１１１０は、セキュアＯＳの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Ｌｏｗ”（非特権レベル）と“Ｍｉｄ”（通常権限レベル）と“Ｈｉｇｈ”（特権レベル）にセキュリティレベルを設定可能であり、“Ｌｏｗ”となっているプロセスの属性値は１、“Ｍｉｄ”となっているプロセスの属性値は２、“Ｈｉｇｈ”となっているプロセスの属性値は３と設定され、セキュリティレベル“Ｌｏｗ”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Ｍｉｄ”に設定されたプロセスは幾つかの特権システムコールの実行のみが制限され、セキュリティレベル“Ｈｉｇｈ”に設定されたプロセスは特権システムコールの実行に制限はない。このようなＯＳには、例えばＳＥ
Ｌｉｎｕｘがあるが、他の種類のＯＳであってもかまわない。【０１４０】
さらに、ＯＳ１１１０は、シグナルハンドラ変更手段１１１と、シグナルハンドラ復帰手段１１１２と、シグナルハンドラ取得手段３００２と、セキュリティレベル変更手段３００３と、セキュリティレベル復帰手段１１１５と、シグナルハンドラ記憶手段１１０４と、セキュリティレベル記憶手段１１０５と、セキュリティレベル変更規則記憶手段３００１とが配置され、さらに、第１の特定の命令としてシグナルハンドラ変更手段１１１１を呼び出すシステムコール１、第２の特定の命令としてシグナルハンドラ復帰手段１１１２を呼び出すシステムコール２、第３の特定の命令としてシグナルハンドラ取得手段３００２を呼び出すシステムコール３、第４の特定の命令としてセキュリティレベル復帰手段１１１２を呼び出すシステムコール４を備える。セキュリティレベル変更規則記憶手段３００１は、図２６に示す内容の変更規則が記憶されている。【０１４１】
プロセスＣは、関数１１２５と、シグナルハンドラフック関数１１２６と、シグナルハンドラＣs0とを含む。関数１１２５は、自関数で行われる処理のうち予め定められた特定の処理を実行する部分の実行前にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール１が実行され、自関数で行われる処理のうち前記特定の処理を実行する部分の実行後にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール２が実行されるようになっている。シグナルハンドラフック関数１１２６は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール３が配置され、関数の終了部分にシステムコール４が配置される。また、システムコール３の直後には、システムコール３によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラＣs0はシグナル０がプロセスＣに送信された際に実行されるシグナルハンドラであり、プロセスＣでは、シグナル１およびシグナル２に対するシグナルハンドラは設定されていない。プロセスＣのシグナルハンドラテーブルを図２６の状態１に示す。また、プロセスＣの識別子は１、プロセスＣの属性値は３（セキュリティレベル“Ｈｉｇｈ”）である。【０１４２】
今、プロセスＣが関数１１２５を呼び出し、その関数１１２５に配置されたシステムコール１をシグナルハンドラフック関数１１２６の開始アドレスを引数として実行する。システムコール１が実行されると、シグナルハンドラ変更手段１１１１が呼び出される。【０１４３】
シグナルハンドラ変更手段１１１１は、プロセスＣの識別子１とプロセスＣのシグナルハンドラテーブルとを組みとして、シグナルハンドラ記憶手段１１０４に記憶する。シグナルハンドラ記憶手段１１０４に記憶されたシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルＣと呼ぶ。デフォルトシグナルハンドラテーブルＣの状態は図２６に示されている。【０１４４】
次にシグナルハンドラ変更手段１１１１は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。次に、プロセスＣのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラＣs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数１１２６の開始アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＣのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＣのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、システムコール１の処理を終了する。この時のプロセスＣのシグナルハンドラテーブルを図２６の状態２に示す。【０１４５】
関数１１２５を実行しているプロセスＣが、システムコール１の実行を終了した後に、シグナル０を受信したとする。プロセスＣのシグナル０のシグナルハンドラにはシグナルハンドラフック関数１１２６が設定されているため、関数１１２５の実行が中断され、シグナルハンドラフック関数１１２６が実行される。そして、シグナルハンドラフック関数１１２６では、受信したシグナル０のシグナルの値０を引数としてシステムコール３を実行する。システムコール３が実行されると、シグナルハンドラ取得手段３００２が呼び出される。【０１４６】
シグナルハンドラ取得手段３００２は、シグナルハンドラ記憶手段１１０４から、プロセスＣの識別子１と組みとなるデフォルトシグナルハンドラテーブルＣを参照し、シグナルの値０と組みとなるシグナルハンドラＣs0の開始アドレスを取得する。次に、セキュリティレベル変更手段３００３を呼び出し、シグナルの値０を渡す。そして、セキュリティレベル変更完了信号を受信するまで待つ。【０１４７】
セキュリティレベル変更手段３００３は、セキュリティレベル記憶手段１１０５に、プロセスＣの識別子１と属性値３を組みとして記憶させる。次に、セキュリティレベル変更規則記憶手段３００１を参照し、シグナルの値０と組みとなる属性値１を取得する。そして、プロセスＣの属性値を１に変更し、シグナルハンドラ取得手段３００２にセキュリティレベル変更完了信号を送信する。【０１４８】
シグナルハンドラ取得手段３００２は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段１１０４より取得したシグナルハンドラＣs0の開始アドレスをシグナルハンドラフック関数１１２６に渡し、システムコール３の処理を終了する。【０１４９】
シグナルハンドラフック関数１１２６では、システムコール３を通じて取得したシグナルハンドラＣs0の開始アドレスを基に、シグナルハンドラＣs0を呼び出す。そして、シグナルハンドラＣs0の実行が終わると、シグナルハンドラフック関数１１２６はシステムコール４を実行する。システムコール４が実行されると、セキュリティレベル復帰手段１１１５が呼び出される。【０１５０】
セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセスＣの識別子１と組みとなる属性値３を取得する。次に、セキュリティレベル記憶手段１１０５に記憶されているプロセスＣの識別子１と属性値３の組みからなるデータを削除する。そして、プロセスＣの属性値を３に変更し、システムコール４の処理を終了する。システムコール４の処理が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、関数１１２５の処理が再開される。【０１５１】
関数１１２５の処理が再開し、その関数に配置されたシステムコール２がシグナルハンドラフック関数１１２６の先頭アドレスを引数として実行されると、シグナルハンドラ復帰手段１１１２が呼び出される。【０１５２】
シグナルハンドラ復帰手段１１１２は、シグナルハンドラ記憶手段１１０４を参照し、プロセスＣの識別子１と組みとなるデフォルトシグナルハンドラテーブルＣを取得する。次に、シグナルハンドラ復帰手段１１１２は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。そして、プロセスＣのシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数１１２６の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＣでシグナルの値０と組みとなるシグナルハンドラＣs0に変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＣのシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＣのシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段１１０４のプロセスＣの識別子１とデフォルトシグナルハンドラテーブルＣの組みからなるデータを削除し、システムコール２の処理を終了する。
【実施例４】
【０１５３】
次に、本発明の第４の実施例を、図２７、図２８、図２９を参照して説明する。かかる実施例は本発明の第４の実施の形態に対応するものである。【０１５４】
本実施例では、プログラム制御により動作するコンピュータ上で、ＯＳ１１１０とプロセスＤ１、Ｄ２とが動作する。【０１５５】
ＯＳ１１１０は、本実施例ではシグナルとして、シグナル０（シグナルの値０）と、シグナル１（シグナルの値１）と、シグナル２（シグナルの値２）を管理し、各プロセスのシグナルハンドラテーブルにはこれらシグナル発生時に実行するシグナルハンドラの開始アドレスがシグナルの値と組みで記憶されており、シグナルが発生した際に、シグナル送信先プロセスのシグナルハンドラテーブルを参照し、シグナルの値と組みとなるシグナルハンドラの開始アドレスを取得し、そのシグナルハンドラを開始する。また、ＯＳ１１１０の下では、シグナルハンドラテーブルは複数のプロセス（スレッド）間で共有することができる。さらに、ＯＳ１１１０は、セキュアＯＳの機能を備えプロセス毎にセキュリティレベルが設定可能であり、本実施例では“Ｌｏｗ”（非特権レベル）と“Ｈｉｇｈ”（特権レベル）にセキュリティレベルを設定可能であり、“Ｌｏｗ”となっているプロセスの属性値は１、“Ｈｉｇｈ”となっているプロセスの属性値は３と設定され、セキュリティレベル“Ｌｏｗ”に設定されたプロセスは特権システムコールの実行が制限され、セキュリティレベル“Ｈｉｇｈ”に設定されたプロセスは特権システムコールの実行に制限はない。このようなＯＳには、例えばＳＥ
Ｌｉｎｕｘがあるが、他の種類のＯＳであってもかまわない。【０１５６】
さらに、ＯＳ１１１０は、シグナルハンドラ変更手段４００３と、シグナルハンドラ復帰手段４００４と、シグナルハンドラ取得手段４００５と、セキュリティレベル変更手段１１１４と、セキュリティレベル復帰手段１１１５と、シグナルハンドラ記憶手段４００２と、セキュリティレベル記憶手段１１０５とが配置され、さらに、第１の特定の命令としてシグナルハンドラ変更手段４００３を呼び出すシステムコール１、第２の特定の命令としてシグナルハンドラ復帰手段４００４を呼び出すシステムコール２、第３の特定の命令としてシグナルハンドラ取得手段４００５を呼び出すシステムコール３、第４の特定の命令としてセキュリティレベル復帰手段１１１５を呼び出すシステムコール４を備える。セキュリティレベル変更手段１１１４は、プロセスの属性値を１（セキュリティレベル“Ｌｏｗ”）に変更する機能を有する。【０１５７】
プロセスＤ１とプロセスＤ２は、同じプログラムのスレッドであり、シグナルハンドラテーブルを共有する。プロセスＤ１とプロセスＤ２は、関数１１２５と、シグナルハンドラフック関数１１２６と、シグナルハンドラＤs0と、シグナルハンドラＤs1と、シグナルハンドラＤs2とを含む。関数１１２５は、自関数で行われる処理のうち予め定められた特定の処理を実行する部分の実行前にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール１が実行され、自関数で行われる処理のうち前記特定の処理を実行する部分の実行後にシグナルハンドラフック関数１１２６の開始アドレスを引数とするシステムコール２が実行されるようになっている。また、関数１１２５のシステムコール２の直前には、シグナル１のシグナルハンドラとしてシグナルハンドラＤs1を設定する命令が配置されている。シグナルハンドラフック関数１１２６は、関数の先頭部分に受信したシグナルの値を引数として実行するシステムコール３が配置され、関数の終了部分にシステムコール４が配置される。また、システムコール３の直後には、システムコール３によって取得するシグナルハンドラの開始アドレスを基に、そのシグナルハンドラを実行する命令が配置されている。シグナルハンドラＤs0はシグナル０がプロセスＤ１またはプロセスＤ２に送信された際に実行されるシグナルハンドラである。プロセスＤ１とプロセスＤ２では、シグナル１とシグナル２に対するシグナルハンドラは設定されていない。プロセスＤ１およびプロセスＤ２のシグナルハンドラテーブルを図２８の状態１に示す。また、プロセスＤ１の識別子は１、プロセスＤ２の識別子は２、プロセスＤ１とプロセスＤ２の属性値は３（セキュリティレベル“Ｈｉｇｈ”）である。【０１５８】
今、プロセスＤ１とプロセスＤ２が図３０に示すような動きをしている状況を想定して、本実施例の動作を説明する。【０１５９】
まず、プロセスＤ１が関数１１２５を呼び出し、その関数に配置されたシステムコール１をシグナルハンドラフック関数１１２６の開始アドレスを引数として実行すると、シグナルハンドラ変更手段４００３が呼び出される。【０１６０】
シグナルハンドラ変更手段４００３は、プロセスＤ１がシグナルハンドラテーブルをプロセスＤ２と共有しているため、プロセスＤ２の識別子２がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されているかを判断する。今の例では、シグナルハンドラ記憶手段４００２に識別子２を含むプロセス識別子群が記憶されていないため、プロセスＤ１の識別子１をプロセス識別子群とし、プロセスＤ１のシグナルハンドラテーブルと組みにして記憶する。シグナルハンドラ記憶手段４００２に記憶したシグナルハンドラテーブルをデフォルトシグナルハンドラテーブルＤと呼ぶ。この時点のデフォルトシグナルハンドラテーブルＤは図２９の状態１である。【０１６１】
次にシグナルハンドラ変更手段４００３は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。そして、プロセスＤ１のシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラＤs0の先頭アドレスが組みとして記憶されているため、シグナルハンドラフック関数１１２６の開始アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＤ１のシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＤ１のシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２にはシグナルハンドラが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、システムコール１の処理を終了する。この時のプロセスＤ１およびプロセスＤ２で共有されるシグナルハンドラテーブルの状態を図２８の状態２に示す。【０１６２】
プロセスＤ１でのシステムコール１の実行が終了した後、プロセスＤ２が、シグナル２のシグナルハンドラとしてシグナルハンドラＤs2を登録し（図２８の状態３）、関数１１２５を呼び出したとする。なお、この時、プロセスＤ１において関数１１２５内のシステムコール２は未だ実行されていない。プロセスＤ２は、関数に配置されたシステムコール１をシグナルハンドラフック関数１１２６の開始アドレスを引数として実行する。システムコール１が実行されると、シグナルハンドラ変更手段４００３が呼び出される。【０１６３】
シグナルハンドラ変更手段４００３は、プロセスＤ２がシグナルハンドラテーブルをプロセスＤ１と共有しているため、プロセスＤ１の識別子１がシグナルハンドラ記憶手段４００２のプロセス識別子群に記憶されているかを判断する。シグナルハンドラ記憶手段４００２には、識別子１を記憶しているプロセス識別子群があるため、そのプロセス識別子群にプロセスＤ２の識別子２を追加する。次に、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルＤを参照する。次に、シグナルハンドラ変更手段４００３は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。そして、プロセスＤ２のシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数１１２６の先頭アドレスが設定されているため、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＤ２のシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラの開始アドレスが設定されていないため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＤ２のシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２には、シグナルハンドラＤs2の先頭アドレスが記憶されているため、シグナルハンドラＤs2をデフォルトシグナルハンドラＤのシグナルの値２の組みとして記憶する。そして、プロセスＤ２のシグナルハンドラテーブルのシグナルの値２の組みは、シグナルハンドラフック関数１１２６の先頭アドレスに変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、システムコール１の処理を終了する。【０１６４】
この時のプロセスＤ１およびプロセスＤ２で共有されるシグナルハンドラテーブルを図２８の状態４に示す。またデフォルトシグナルハンドラテーブルＤの内容を図２９の状態２に示す。【０１６５】
ここで、プロセスＤ１がシグナル２を受信したとする。プロセスＤ１のシグナル２のシグナルハンドラにはシグナルハンドラフック関数１１２６が設定されているため、関数１１２５の実行が中断され、シグナルハンドラフック関数１１２６が実行される。そして、シグナルハンドラフック関数１１２６では、受信したシグナル２のシグナルの値２を引数としてシステムコール３を実行する。システムコール３が実行されると、シグナルハンドラ取得手段４００５が呼び出される。【０１６６】
シグナルハンドラ取得手段４００５は、シグナルハンドラ記憶手段４００２から、プロセスＤ１の識別子１を記憶しているプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルＤを参照し、シグナルの値２と組みとなるシグナルハンドラＤs2の開始アドレスを取得する。そして、セキュリティレベル変更手段１１１４を呼び出し、セキュリティレベル変更完了信号を受信するまで待つ。【０１６７】
セキュリティレベル変更手段１１１４は、セキュリティレベル記憶手段１１０５に、プロセスＤ１の識別子１と属性値３を組みとして記憶させる。そして、プロセスＤ１の属性値を１に変更し、シグナルハンドラ取得手段４００５にセキュリティレベル変更完了信号を送信する。【０１６８】
シグナルハンドラ取得手段４００５は、セキュリティレベル変更完了信号を受信すると、シグナルハンドラ記憶手段４００２より取得したシグナルハンドラＤs2の開始アドレスをシグナルハンドラフック関数１１２６に渡し、システムコール３の処理を終了する。【０１６９】
シグナルハンドラフック関数１１２６は、システムコール３を通じて取得したシグナルハンドラＤs2の開始アドレスを基に、シグナルハンドラＤs2を呼び出す。そして、シグナルハンドラＤs2の実行が終わると、シグナルハンドラフック関数１１２６はシステムコール４を実行する。システムコール４が実行されると、セキュリティレベル復帰手段１１１５が呼び出される。【０１７０】
セキュリティレベル復帰手段１１１５は、セキュリティレベル記憶手段１１０５を参照し、プロセスＤ１の識別子１と組みとなる属性値３を取得する。次に、セキュリティレベル記憶手段１１０５に記憶されているプロセスＤ１の識別子１と属性値３の組みからなるデータを削除する。次に、プロセスＤ１の属性値を３に変更し、システムコール４の処理を終了する。システムコール４の処理が終了すると、シグナルハンドラフック関数１１２６の処理は終了となる。シグナルハンドラフック関数１１２６の処理が終了すると、プロセスＤ１の関数１１２５の処理が再開される。【０１７１】
プロセスＤ１が関数１１２５の処理を再開し、その関数内に配置された、シグナル１のシグナルハンドラとしてシグナルハンドラＤs1を設定する命令を実行した後（シグナルハンドラテーブルは図２８の状態５になる）、システムコール２をシグナルハンドラフック関数１１２６の先頭アドレスを引数として実行したとする。なおこの時、プロセスＤ２の関数１１２５においてシステムコール２は未だ実行されていない。システムコール２が実行されると、シグナルハンドラ復帰手段４００４が呼び出される。【０１７２】
シグナルハンドラ復帰手段４００４は、プロセスＤ１の識別子１を含むプロセス識別子群を、シグナルハンドラ記憶手段４００２から参照する。今の場合、そのプロセス識別子群に識別子１以外に識別子２が存在している。次にシステムハンドラ復帰手段４００４は、そのプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルＤを参照し、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。そして、プロセスＤ１のシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数１１２６の先頭アドレスが設定されているため、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＤ１のシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラＤs1の開始アドレスが設定されているため、シグナルハンドラＤs1をデフォルトシグナルハンドラＤのシグナルの値１の組みとして記憶する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＤ１のシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２には、シグナルハンドラフック関数１１２６の先頭アドレスが記憶されているため、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段４００２のプロセスＤ１の識別子を含むプロセス識別子群より、識別子１を削除し、システムコール２の処理を終了する。この時のプロセスＤ１およびプロセスＤ２で共有されるシグナルハンドラテーブルを図２８の状態６に示す。またデフォルトシグナルハンドラテーブルＤの内容を図２９の状態３に示す。【０１７３】
次に、プロセスＤ２が関数１１２５の処理を再開し、その関数内に配置された、シグナル１のシグナルハンドラとしてシグナルハンドラＤs1を設定する命令を実行した後（シグナルハンドラテーブルは図２８の状態５になる）、システムコール２をシグナルハンドラフック関数１１２６の先頭アドレスを引数として実行したとする。システムコール２が実行されると、シグナルハンドラ復帰手段４００４が呼び出される。【０１７４】
シグナルハンドラ復帰手段４００４は、シグナルハンドラ記憶手段４００２を参照し、プロセスＤ１の識別子１を含むプロセス識別子群を、シグナルハンドラ記憶手段４００２から参照する。今の場合、そのプロセス識別子群に識別子２以外に識別子は存在しない。システムハンドラ復帰手段４００４は、プロセスＤ２の識別子２を含むプロセス識別子群と組みとなるデフォルトシグナルハンドラテーブルＤを取得する。次に、シグナルハンドラ変更手段４００３は、シグナル探索番号を初期値０に設定する。ここでＯＳは、シグナルの値０〜２のシグナルを管理しているため、シグナル探索番号の最大値は２である。プロセスＤ２のシグナルハンドラテーブルのシグナルの値０と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値０はシグナルハンドラフック関数１１２６の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＤでシグナルの値０と組みとなるシグナルハンドラＤs0に変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は１となったため、プロセスＤ２のシグナルハンドラテーブルのシグナルの値１と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値１にはシグナルハンドラＤs1の開始アドレスが設定されているため、シグナル探索番号に１をプラスする。シグナル探索番号は２となったため、プロセスＤ２のシグナルハンドラテーブルのシグナルの値２と組みとなるシグナルハンドラの開始アドレスを参照する。シグナルの値２はシグナルハンドラフック関数１１２６の先頭アドレスが組みとして記憶されているため、デフォルトシグナルハンドラテーブルＤでシグナルの値２と組みとなるシグナルハンドラＤs2に変更する。そして、シグナル探索番号に１をプラスする。シグナル探索番号は３となり、シグナル探索番号の最大値より大きくなったため、シグナルハンドラ記憶手段４００２のプロセスＤ２の識別子２を記憶しているプロセス識別子群とデフォルトシグナルハンドラテーブルＤの組みからなるデータを削除し、システムコール２の処理を終了する。【０１７５】
なお、プロセスＤ１がシステムコール２を実行した時点からプロセスＤ２がシステムコール２を実行する時点までの区間に、シグナル２がプロセスＤ１で受信された場合、本実施例では、プロセスＤ１の属性値が非特権レベルに変更されて、システムハンドラＤs2が実行される。また、前述した第４の実施の形態の変形例のように、セキュリティレベル変更手段１１１４が、プロセスＤ１の識別子が、シグナルハンドラ記憶手段４００２中の何れかのプロセス識別子群に含まれているか否かを調べ、含まれている場合に限ってプロセスＤ１の属性値を変更し、含まれていなければ属性値を変更しない実施例では、プロセスＤ１がシステムコール２を実行した時点からプロセスＤ２がシステムコール２を実行する時点までの区間に、シグナル２がプロセスＤ１で受信された場合、プロセスＤ１の属性値が特権レベルのままシステムハンドラＤs2が実行される。【０１７６】
本発明の実施の形態にあっては、プロセスが第１の特定の命令及び第２の特定の命令を含む関数を呼び出すと、その関数で処理を保証したい処理区間前に、第１の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ変更手段により、プロセスのシグナルハンドラテーブルがプロセスの識別子と組みにしてシグナルハンドラ記憶手段に記憶（退避）される。引き続き、シグナルハンドラ変更手段は、プロセスのシグナルハンドラテーブルを参照し、プロセスのシグナルハンドラテーブルに設定されているシグナルハンドラをシグナルハンドラフック関数に変更する。そして、第１の特定の命令を実行した関数を処理中に、シグナルハンドラフック関数を設定した種別のシグナルが発生すると、シグナルハンドラフック関数が呼び出される。シグナルハンドラフック関数では、第３の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ取得手段により、シグナルハンドラ記憶手段に記憶されているプロセスの識別子と組みとなるシグナルハンドラテーブルが参照され、参照したシグナルハンドラテーブルより、プロセスが受信したシグナルの種別と組みとなるシグナルハンドラが取得される。引き続き、シグナルハンドラ取得手段は、セキュリティレベル変更手段を呼び出す。セキュリティレベル変更手段では、プロセスの属性値を変更し、プロセスのセキュリティレベルを特権命令が実行できないように変更する。プロセスのセキュリティレベルが変更されると、シグナルハンドラ取得手段は、シグナルハンドラ記憶手段より取得したシグナルハンドラをシグナルハンドラフック関数に返す。シグナルハンドラフック関数では、取得したシグナルハンドラを実行する。このシグナルハンドラ内で特権命令を実行すると内部割り込みが発生し、特権命令実行制御手段によってプロセスの属性値に応じて特権命令の実行可否が判断される。ここでプロセスの属性値はセキュリティレベル変更手段によって変更されているため、特権命令は実行されず、エラーとなる。その後、シグナルハンドラの処理が終了すると、シグナルハンドラフック関数では、第４の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、セキュリティレベル復帰手段によってプロセスの属性値が変更され、プロセスのセキュリティレベルがセキュリティレベル変更手段によって変更される前の状態に戻される。そして、シグナルハンドラフック関数の処理が終了し、再び第１の特定の命令及び第２の特定の命令を含む関数の処理が続行され、第２の特定の命令が実行され、内部割込みが発生する。この内部割込みにかかわる処理において、シグナルハンドラ復帰手段により、プロセスのシグナルハンドラテーブルが参照される。そして、シグナルハンドラテーブルに設定されているシグナルハンドラがシグナルハンドラフック関数であった場合、シグナルハンドラ記憶手段を参照し、プロセスの識別子と組みとなるシグナルハンドラテーブルからシグナルハンドラを取得し、プロセスのシグナルハンドラをシグナルハンドラフック関数に設定される以前のシグナルハンドラに変更する。これにより、目的を達成することができる。【０１７７】
以上好ましい実施の形態（及び実施例）を参照して本願発明を説明したが、本願発明は上記実施の形態（及び実施例）に限定されるものでない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。【０１７８】
この出願は、２００７年２月２２日に出願された日本出願特願２００７−０４１７１１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１７９】
本発明によれば、信頼性が不明なシグナルハンドラの処理を含むプロセスを情報処理装置で安全に実行するといった用途に適用できる。ここで、情報処理装置はパーソナルコンピュータのようなものから、携帯電話やＰＤＡ等の移動体通信端末等の組み込みコンピュータ、ゲーム機器、及び多機能複写機等に至るまで適用できる。
【図１】
2008111382.tif 000003
【図２】
2008111382.tif 000004
【図３】
2008111382.tif 000005
【図４】
2008111382.tif 000006
【図５】
2008111382.tif 000007
【図６】
2008111382.tif 000008
【図７】
2008111382.tif 000009
【図８】
2008111382.tif 000010
【図９】
2008111382.tif 000011
【図１０】
2008111382.tif 000012
【図１１】
2008111382.tif 000013
【図１２】
2008111382.tif 000014
【図１３】
2008111382.tif 000015
【図１４】
2008111382.tif 000016
【図１５】
2008111382.tif 000017
【図１６】
2008111382.tif 000018
【図１７】
2008111382.tif 000019
【図１８】
2008111382.tif 000020
【図１９】
2008111382.tif 000021
【図２０】
2008111382.tif 000022
【図２１】
2008111382.tif 000023
【図２２】
2008111382.tif 000024
【図２３】
2008111382.tif 000025
【図２４】
2008111382.tif 000026
【図２５】
2008111382.tif 000027
【図２６】
2008111382.tif 000028
【図２７】
2008111382.tif 000029
【図２８】
2008111382.tif 000030
【図２９】
2008111382.tif 000031
【図３０】
2008111382.tif 000032
【国際調査報告】
2008111382.tif 000033
2008111382.tif 000034
2008111382.tif 000035
2008111382.tif 000036