(57)【特許請求の範囲】
【請求項１】
空きバッファをチェイン状にリンクして管理する空きバッファ管理方法であって、
複数のバッファから構成される連続したバッファ領域を、優先的に使用する運用バッファと、該運用バッファが全て使用されているときに使用する待機バッファとに分割し、かつ、運用バッファと待機バッファとがアドレス的に交互に出現するように分割して、運用バッファチェインと待機バッファチェインのそれぞれのバッファチェインを組み、
運用バッファチェインと待機バッファチェインのどちらかにつながれているバッファにメモリ保護を設定しておき、
バッファ捕捉要求に伴うどちらかのバッファチェインからのとりはずし時に、捕捉するバッファのメモリ保護を解除し、
バッファ解放要求に伴うどちらかのバッファチェインへのつなぎこみ時に、解放するバッファのメモリ保護を設定する、
ことを特徴とする空きバッファ管理方法。
【請求項２】
請求項１記載の空きバッファ管理方法において、バッファ解放要求に伴うバッファチェインへのつなぎこみ時に、解放するバッファ内の任意のメモリの内容を読み出し、該内容を再び同一メモリに書き込んでから、メモリ保護を設定することを特徴とする空きバッファ管理方法。
【請求項３】
請求項１、２記載の空きバッファ管理方法において、運用バッファが全て使用中の時は、待機バッファの捕捉は行なわずに、捕捉要求元にバッファ捕捉失敗を返却することを特徴とする空きバッファ管理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オンライン情報処理システムのホストコンピュータなどにおいて、動的にメモリの割り当て／解放を行うために、メモリの空きバッファをチェイン状にリンクして管理する空きバッファ管理方法に関し、特に捕捉したバッファのバッファサイズの範囲を超えたエリアへの不正なメモリアクセスの検出、解放済みバッファへの不正なメモリアクセスの検出、さらには解放済みバッファの二重解放の検出などが容易に可能な空きバッファ管理方法に関する。
【０００２】
【従来の技術】
従来、動的なメモリ割り当て要求、割り当てられたメモリへのアクセス要求や解放要求などを含むユーザプログラムが動作するコンピュータにおいて、動的に割り当てられたメモリへユーザプログラムの不具合によるアクセスが行われたことを自動的に検出する方法としては、例えば、特開平７−３１９７３５号公報（特許第２７５７７７号）に記載の方法がある。
【０００３】
この方法では、ＰＭＭＵ（Ｐage Ｍemory Ｍanagement Ｕnit）と割込みハンドラを利用し、次のようにして動的割り当てメモリに関するアクセスだけに限定した不正アクセスの検出を可能にしている。即ち、ユーザプログラムでアクセスされる仮想アドレスはアクセス不可であるように予めページ管理テーブルを構成しておく。ユーザプログラムの実行でメモリアクセスがあると、ＰＭＭＵはページ管理テーブルでアクセス不可を知る。そこで、ＰＭＭＵはＣＰＵに割込みをかけ、割込みハンドラを起動させる。この割込みハンドラの割込処理の中でアクセス対象アドレスの正否を調べ、アクセス可能な仮想アドレスへの変換を行い、これをＰＭＭＵへ再度与える。ＰＭＭＵは、この仮想アドレスを物理アドレスに変換し、ユーザプログラムに制御を戻す。
【０００４】
【発明が解決しようとする課題】
上記従来の方法では、メモリへの書き込みあるいは読み込みのアクセスが発生するたびに、割込みハンドラでアクセスの正当性をチェックすることができるため、動的に割り当てたメモリの範囲を超えたメモリアクセスの検出、動的に割り当てたメモリへの書き込み命令実行前の読み込み命令実行の検出、さらに、解放済み動的割り当てメモリへのアクセスの検出などが可能となる。
【０００５】
しかしながら、メモリへの読み出しあるいは書き込みのアクセスが有るたびに、割込みハンドラが起動されて不正アクセスのチェックが行なわれるため、処理のオーバヘッドが非常に大きいことから、ソフトウェア開発ツール、不具合調査ツール、品質検査／向上ツールといった分野での適用には有効であるが、運用システムに適用する場合には、処理能力を十分に検討する必要がある。
【０００６】
また、オンライン情報処理システムなどにおいて、ホストコンピュータが通信制御で送受信データを一時的に格納するために、動的に割り当てて使用される複数のバッファを対象に、上記従来方法を適用しようとすると、デバッグ期間中はともかく、運用システムでの適用は処理能力的に非常に困難である。
【０００７】
本発明の目的は、オンライン情報処理システムのホストコンピュータなどにおいて、捕捉したバッファのバッファサイズの範囲を超えたエリアへの不正なメモリアクセスの検出、あるいは解放済みバッファへの不正なメモリアクセスの検出、さらにはあるいは解放済みバッファの二重解放の検出などを、処理のオーバヘッドを極力抑えたかたちで実現でき、しかもデバッグ期間中のみならず、運用システムへの適用も可能な、空きバッファ管理方法を提供することにある。
【０００８】
【課題を解決するための手段】
空きバッファはチエイン状にリンクしてバッファチエインとして管理される。本発明は、メモリ保護の設定・解除単位と同一、またはその整数倍のバッファサイズを有する複数のバッファから構成される連続したバッファ領域を、優先的に使用する運用バッファと、該運用バッファが全て使用されているときに使用する待機バッファとに分割し、さらに、連続したバッファ領域のなかで、運用バッファと待機バッファとがアドレス的に交互に出現するように分割して、運用バッファチェインと待機バッファチェインの２つのバッファチェインを組み、どちらかのバッファチェインにつながれている間は、該当するバッファにメモリ保護を設定しておく。そして、バッファ捕捉要求に伴うどちらかのバッファチェインからのとりはずし時に、捕捉するバッファのメモリ保護を解除し、バッファ解放要求に伴うどちらかのバッファチェインへのつなぎこみ時に、解放するバッファのメモリ保護を設定する。
【０００９】
これにより、運用バッファの前後に、メモリ保護の設定された待機バッファが存在することになり、捕捉したバッファ以外のエリアへの不正なメモリ書き込みを検出することが可能となる。また、解放済みバッファにはメモリ保護が設定されるため、当該解放済みのバッファへの不正メモリ書き込みの検出も可能となる。
【００１０】
さらに、本発明では、バッファ解放要求に伴うバッファチェインへのつなぎこみ時に、解放するバッファ内の任意のメモリの内容を読み出し、該読み出した内容を再び同じメモリに書き込んでから、メモリ保護を設定する。これにより、メモリへの再書き込みの際に、バッファの２重解放を検出することが可能となる。
【００１１】
【発明の実施の形態】
以下、本発明を図示する実施例に基づき詳細に説明する。
図１は、本発明の一実施例を示し、これは通信回線１０３を介して端末装置１０２と接続されるホストコンピュータ１０１に適用した場合の全体的システム構成を示す図である。ホストコンピュータ１０１には、一般に多数の端末装置が接続されるが、便宜上、図１では一台の端末装置のみを示している。
【００１２】
図において、ホストコンピュータ１０１は、通信制御部１０４、バッファ捕捉部１０５、バッファ解放部１０６、バッファ管理情報初期設定部１０７の各処理部、及び、主記憶１０８から構成される。主記憶１０８は、バッファが複数個確保されているバッファ領域１１２と、バッファ領域１１２に確保された複数のバッファを管理するバッファ管理テーブル１１１と、複数のバッファを運用空きバッファチェインと待機空きバッファチェインに大別して管理するための、運用空きバッファチェイン管理テーブル１０９と待機空きバッファチェイン管理テーブル１１０を有している。
【００１３】
通信制御部１０４は、端末装置１０２との通信を制御するもので、該通信制御部１０４が端末装置１０２とデータの送受信を行う際に送受信データを一時的に格納するために、主記憶１０８のバッファ領域１１２に確保されているバッファが使用される。通信制御部１０４では、新しくバッファを使用する場合、バッファ捕捉要求をバッファ捕捉部１０５へ出し、使用中のバッファを解放する場合、バッファ解放要求をバッファ解放部１０６へ出す。
【００１４】
バッファ捕捉部１０５は、通信制御部１０４からバッファ捕捉要求を受け取ると、運用／待機空きバッファチェイン管理テーブル１０９，１１０、バッファ管理テーブル１１１を参照して、運用／待機空きバッファチェインからのバッファ捕捉処理を実行する。この時、捕捉したバッファのメモリ保護を解除する。バッファ解放部１０６は、通信制御部１０４からバッファ解放要求を受け取ると、解放されるバッファがつながっていたバッファチェインに対応する運用／待機空きバッファチェイン管理テーブルを対象にバッファ解放処理を実行する。この時、解放するバッファのメモリ保護を設定する。
【００１５】
バッファ管理情報初期設定部１０７は、各種バッファ管理情報を初期設定する。具体的動作は後述するが、このバッファ管理情報初期設定部１０７にて、メモリ保護の設定・解除単位と同一、またはその整数倍のバッファサイズを有する複数のバッファから構成される連続したバッファ領域１１２を運用バッファとに待機バッファと分割し、さらに、この連続したバッファ領域１１２のなかで、運用バッファと待機バッファとがアドレス的に交互に出現するように分割して、運用バッファチェインと待機バッファチェインの２つのバッファチェインを組み、運用／待機空バッファチェイン管理テーブル１０９，１１０及びバッファ管理テーブル１１１の内容を初期設定する。さらに、この初期設定時、運用待機バッファチェインにつながる各バッファにメモリ保護を設定しておく。
【００１６】
図２は、運用空きバッファチェイン管理テーブル１０９の構成例を示す説明図である。運用空きバッファチェイン管理テーブル１０９は、運用空きバッファチェインの先頭につながれているバッファ情報を示す先頭バッファ管理テーブルポインタ(F_B_MNG_P)２０１と、該チェインの最後につながれているバッファ情報を示す最終バッファ管理テーブルポインタ(L_B_MNG_P)２０２とから構成される。
【００１７】
図３は、待機空きバッファチェイン管理テーブル１１０の構成例を示す説明図である。待機空きバッファチェイン管理テーブル１１０は、待機空きバッファチェインの先頭につながれているバッファ情報を示す先頭バッファ管理テーブルポインタ(F_B_MNG_P)３０１と、該チェインの最後につながれているバッファ情報を示す最終バッファ管理テーブルポインタ(L_B_MNG_P)３０２とから構成される。
【００１８】
図４は、バッファ管理テーブル１１１の構成例を示す説明図である。ここで、管理対象のバッファ領域１１２は、図５に示すように、バッファサイズが４キロバイトのバッファ７個から構成され、それぞれのバッファの先頭アドレスが、バッファ(０)５００がH'0000番地、バッファ(１)５０１がH'1000番地、バッファ(２)５０２がH'2000番地、バッファ(３)５０３がH'3000番地、バッファ(４)５０４がH'4000番地、バッファ(５)５０５がH'5000番地、バッファ(６)５０６がH'6000番地であるとする。
【００１９】
図４において、バッファ管理テーブル１１１はテーブル４００〜４０６からなり、それぞれ図５のバッファ５００〜５０６に対応している。具体的には、バッファ(０)５００を管理するバッファ管理テーブル０(B_MNB0)４００は、運用空きバッファチェインあるいは待機空きバッファチェインを組むための、次リンクテーブルポインタ(N_LNK_P)４０７と、当該バッファ(０)５００の先頭アドレスを格納するバッファポインタ(BUF_P)４０８とから構成される。ここでは、バッファポインタ４０８には、具体的な先頭アドレスとしてH'0000が設定される。バッファ(１)５０１からバッファ(６)５０６を管理する、バッファ管理テーブル１
(B_MNB1)４０１からバッファ管理テーブル６(B_MNB6)４０６も同様な構成である。
【００２０】
図５のバッファ(０)５００からバッファ(６)５０６は、運用／待機のどちらかのバッファチェインにつながれている間は、当該バッファにメモリ保護が設定される。メモリ保護機能には、プロセッサアーキテクチャにより、キー方式、リング方式、アクセス権方式の各種が存在し、保護の範囲も、プロセッサアーキテクチャや仮想メモリ方式に依存して、ページ単位やセグメント単位といった各種の形態が存在している。本発明は、メモリ保護機能を実現する方式には左右されないが、メモリ保護範囲に左右されるものであり、例えばメモリ保護範囲が１キロバイト単位である場合には、バッファサイズを１キロバイトの整数倍（１キロバイト、２キロバイト、…）、また、メモリ保護範囲が２キロバイト単位の場合には、バッファサイズを２キロバイトの整数倍（２キロバイト、４キロバイト、…）にする必要がある。図５の具体的実施例では、メモリ保護範囲が４キロバイト単位のアーキテクチャからなるプロセッサで実現する場合の実施例であり、プロセッサアーキテクチャでメモリ保護単位が８キロバイトの場合には、本実施例の２倍のバッファ領域１１２を確保する必要がある。
【００２１】
以下に、バッファ管理情報初期設定部１０７、バッファ捕捉部１０５及びバッファ解放部１０６の動作について説明する。なお、バッファ領域１１２は図５に示した構成をとるとする。
【００２２】
図６に、バッファ管理情報初期設定部１０７で実行される、バッファ管理情報初期設定処理の処理フローを示す。このバッファ管理情報初期設定処理は、例えばシステムの立上げ時などに実行される。
【００２３】
バッファ管理情報初期設定処理では、まず、領域サイズが７キロバイトのバッファ領域１１２を捕捉し（ステップ６０１）、捕捉したバッファ領域１１２の全領域にメモリ保護を設定する（ステップ６０２）。次に、捕捉したバッファ領域１１２を、バッファサイズがそれぞれ１キロバイトの７つのバッファ、即ち、図５に示したバッファ(０)５００、バッファ(１)５０１、バッファ(２)５０２、バッファ(３)５０３、バッファ(４)５０４、バッファ(５)５０５、バッファ(６)５０６に分割し、図４に示したように、バッファ管理テーブル１１１のそれぞれの管理テーブル４００〜４０６の各バッファポインタ(BUF_P)４０８，４１０，４１２，１４６，１４８，４２０に当該バッファ５００〜５０６の先頭アドレスを設定する（ステップ６０３）。次に、本実施例では、奇数番目のバッファ、即ち、バッファ(１)５０１、バッファ(３)５０３、バッファ(５)５０５を運用バッファとして運用空きバッファチェイン管理テーブル１０９につなぎこみ（ステップ６０４）、偶数番目のバッファ、即ち、バッファ(０)５００、バッファ(２)５０２、バッファ(４)５０４、バッファ(６)５０６を待機バッファとして待機空きバッファチェイン管理テーブル１１０につなぎこみ（ステップ６０５）、バッファ管理情報初期設定処理を終了する。
【００２４】
図７は、バッファ管理情報初期設定部１０７がバッファ管理情報初期設定処理を実行した直後の、運用空きバッファチェイン管理テーブル１０９、待機空きバッファチェイン管理テーブル１１０、及び、バッファ管理テーブル１１１内の各バッファ５００〜５０６に対応するバッファ管理テーブル(０)４００、バッファ管理テーブル(１)４０１、バッファ管理テーブル(２)４０２、バッファ管理テーブル(３)４０３、バッファ管理テーブル(４)４０４、バッファ管理テーブル(５)４０５、バッファ管理テーブル(６)４０６の具体的構成を示したものである。この時点で、バッファ領域１１２の各バッファ５００〜５０６は、すべてメモリ保護が設定される。
【００２５】
図８に、バッファ捕捉部１０５で実行される、バッファ捕捉処理の処理フローを示す。このバッファ捕捉処理は通信制御部１０４からバッファ捕捉要求を受けるごとに実行される。
【００２６】
バッファ捕捉処理では、まず、運用空きバッファチェイン管理テーブル１０９から、先頭バッファ管理テーブルポインタ(F_B_MNG_P)２０１を抽出し（ステップ８０１）、抽出したポインタがNULLPかを判定する（ステップ８０２）。ステップ８０２の判定で、NULLPでない、つまり運用空きバッファチェインに空きバッファがあると判定されると、運用空きバッファチェイン管理テーブル１０９から、先頭のバッファを取り外し（ステップ８０３）、該捕捉したバッファのメモリ保護を解除し（ステップ８０４）、バッファ捕捉結果＝成功として、捕捉したバッファのポインタを捕捉要求元へ返却し（ステップ８０５）、即ち、本実施例では通信制御部１０４へ返却し、バッファ捕捉処理を終了する。ステップ８０２の判定で、NULLPつまり運用空きバッファチェインに空きバッファが無いと判定されると、待機空きバッファチェイン管理テーブル１１０から、先頭バッファ管理テーブルポインタ(F_B_MNG_P)３０１を抽出し（ステップ８０６）、抽出したポインタがNULLPかを判定する（ステップ８０７）。ステップ８０７の判定で、NULLPでない、つまり待機空きバッファチェインに空きバッファがあると判定されると、待機空きバッファチェイン管理テーブル１１０から、先頭のバッファを取り外し（ステップ８０８）、ステップ８０４，８０５の処理を実行する。ステップ８０７で、NULLPつまり待機空きバッファチェインにも空きバッファが無いと判定されると、バッファ捕捉結果＝失敗として捕捉要求元へ返却し（ステップ８０９）、バッファ捕捉処理を終了する。
【００２７】
図９は、図７の初期状態で、図８のバッファ捕捉処理が実行され、運用空きバッファチェインの先頭につながれていたバッファ(１)５０１が捕捉された後の、運用空きバッファチェイン管理テーブル１０９、待機空きバッファチェイン管理テーブル１１０、及び、バッファ管理テーブル１１１内のバッファ(１)５０１を除く各バッファ５００，５０２〜５０６に対応するバッファ管理テーブル(０)４００バッファ管理テーブル(２)４０２、バッファ管理テーブル（３）４０３、バッファ管理テーブル（４）４０４、バッファ管理テーブル（５）４０５、バッファ管理テーブル（６）４０６の具体的構成を示したものである。
【００２８】
図９に着目するに、バッファ領域１１２のバッファ(１)５０１の領域（運用バッファ領域）のみが、メモリ保護が解除されており、この前後に、メモリ保護の設定されたバッファ５００，５０２の領域（待機バッファ領域）が存在する。したがって、捕捉したバッファ(１)５０１のバッファサイズの範囲を超えたエリア、即ち、バッファ５００，５０２の領域への不正なメモリ書込みなどのメモリアクセスが行われた場合、メモリ保護違反が発生し、該不正なメモリアクセスを容易に検出することが可能となる。
【００２９】
なお、図８のバッファ捕捉処理では、ステップ８０２で運用空きバッファチェインに空きバッファが無いと判定された場合、待機空きバッファチェインから空きバッファを捕捉するため、運用空きバッファチェインのバッファ(１)５０１、バッファ(３)５０３、バッファ(５)５０５に続いて、待機空きバッファチェインに組み込まれているバッファ(０)５００、バッファ(２)５０２、バッファ(４)５０４、バッファ(６)５０６が使用されると、その使用されている間は、連続するバッファ領域のメモリ保護が解除されてしまい、捕捉したバッファのバッファサイズの範囲を超えた領域への不正なメモリアクセスを検出できなくなる。本実施例は、このようなことは非常に稀れであるとして許容するものであるが、これは次のようにして回避することが可能である。即ち、図８のステップ８０２で、運用空きバッファチェインに空きバッファが無いと判定された場合、待機空きバッファチェインから空きバッファを捕捉するのではなく、ステップ８０９の処理を実行して、バッファ捕捉結果＝失敗を補足要求元へ返却するようにする。これにより、待機空きバッファチェインに組み込まれている、バッファ２５０２、バッファ４５０４、バッファ６５０６が常にメモリ保護がかかっていることとなり、図８で説明した処理フローをとる場合より、バッファの不法アクセス検出能力が向上する。
【００３０】
また、バッファ捕捉処理の入力パラメータとして、バッファ捕捉要求元が必要とするバッファサイズを通知するようにし、捕捉したバッファの先頭ではなく最終アドレスから捕捉要求バッファサイズ分を差し引いたアドレスを、捕捉バッファの先頭アドレスとして捕捉要求元に返却する処理としてもよい。この場合、捕捉要求元が必要と考えているバッファサイズよりも大きい範囲で誤って使用している場合、捕捉したバッファの次には、待機バッファとしてメモリ保護がかかっているため、メモリ保護違反を検出できる可能性が高まる。
【００３１】
図１０に、バッファ解放部１０６で実行される、バッファ解放処理の処理フローを示す。このバッファ解放処理は通信制御部１０４からバッファ解放要求を受けるごとに実行される。
【００３２】
バッファ解放処理では、まず、解放要求のあったバッファの先頭メモリの内容を読み取り（ステップ１００１）、読み取った値を、解放要求のあったバッファの先頭メモリに書き込む処理を実行する（ステップ１００２）。次に、解放要求のあったバッファのメモリ保護を設定する（ステップ１００３）。次に、解放要求のあったバッファのつなぎこむバッファチェインを判定し（ステップ１００４）、運用空きバッファチェインの場合は、運用空きバッファチェイン管理テーブル１０９の最後に解放要求のあったバッファをつなぎこみ（ステップ１００５）、待機空きバッファチェインの場合は、待機空きバッファチェイン管理テーブル１１０の最後に解放要求のあったバッファをつなぎこんで（ステップ１００６）、バッファ解放処理を終了する。
【００３３】
図１０において、ステップ１００１および１００２で、解放要求のあったバッファの先頭メモリの読み取り及び書き込みを実施する目的は、バッファの二重解放を検出するためである。即ち、バッファが既に解放されている場合には、ステップ１００３に示したように、メモリ保護が設定されており、このため、既に解放したバッファに対してさらに解放要求が行われた場合、ステップ１００２のメモリへの書き込み処理で、メモリ保護違反が発生し、バッファの二重解放バグなどを容易に検出することが可能となる。なお、ステップ１００１，１００２では、解放要求のあったバッファの先頭メモリに対してリード／ライトを実行するとしたが、特に先頭メモリである必要はない。
【００３４】
図１０のステップ１００２で、メモリ保護違反を検出した場合、例えば従来機能による割り込み処理ルーチンの中で、システムの部分初期設定あるいは関連処理の部分初期設定といった処理を行い、バッファの二重解放をガードするとともに、解放したバッファをしばらく使い続けてしまうバグがシステムに及ぼす影響を小さくするなど、バグの影響範囲を局所化することが可能となる。
【００３５】
図１１は、図９の状態で、図１０のバッファ解放処理が実行されて、図８のバッファ捕捉処理で捕捉されたバッファ(１)５０１が解放された後の、運用空きバッファチェイン管理テーブル１０９、待機空きバッファチェイン管理テーブル１１０、及び、バッファ管理テーブル１１１内の各バッファ５００〜５０６に対応するバッファ管理テーブル(０)４０１、バッファ管理テーブル(１)４０１、バッファ管理テーブル(２)４０２、バッファ管理テーブル(３)４０３、バッファ管理テーブル(４)４０４、バッファ管理テーブル(５)４０５、バッファ管理テーブル(６)４０６具体的構成を示したものである。
【００３６】
図１１に示すように、解放されたバッファ(１)５０１には、メモリ保護が設定されるため、該解放済みバッファ(１)５０１への不正なメモリ書込みなどのメモリアクセスが行われた場合、メモリ保護違反が発生し、該不正メモリアクセスを容易に検出することが可能となる。また、該解放済みバッファ(１)５０１に対してさらに解放要求が行われた場合も、上記ステップ１００２の実行で２重解放を検出することが可能となる。バッファの二重解放が発生すると、空バッファチェイン破壊の原因となるため、バッファ二重解放は極力防止する必要がある。
【００３７】
以上説明してきた具体的実施例は、実記憶のみのシステムにも、また、実記憶のほかに仮想記憶を持つシステムのどちらにも適応可能であるが、実記憶のほかに仮想記憶を持つシステムに対しては、論理空間（仮想記憶）には運用バッファと待機バッファの双方を生成するが、物理空間（実記憶）には運用バッファのみを生成することで、実施例で説明した場合と同じ作用効果をあげることが出来る。この場合、運用空きバッファがなくなった時に、待機空きバッファチェインからの捕捉を行わないのは言うまでもない。さらに、待機空きバッファチェインそのものも不要である。
【００３８】
【発明の効果】
以上説明したように、本発明では、空きバッファをチェイン状にリンクして管理する空きバッファ管理において、複数のバッファから構成される連続したバッファ領域を、優先的に使用する運用バッファと、該運用バッファが全て使用されているときに使用する待機バッファとに分割し、かつ、運用バッファと待機バッファとがアドレス的に交互に出現するように分割して、運用バッファチェインと待機バッファチェインの２つのバッファチェインを組み、どちらかのバッファチェインにつながれている間は、該当するバッファにメモリ保護を設定しておき、バッファ捕捉要求に伴うどちらかのバッファチェインからのとりはずし時に、捕捉するバッファのメモリ保護を解除し、バッファ解放要求に伴うどちらかのバッファチェインへのつなぎこみ時に、解放するバッファのメモリ保護を設定する。これにより、運用バッファの前後に、メモリ保護の設定された待機バッファが存在することになり、捕捉したバッファ以外のエリアへの不正なメモリ書き込みなどのメモリアクセスを検出することが可能となり、しかも、解放済みバッファはメモリ保護が設定されるため、当該解放済みのバッファへの不正メモリ書き込みの検出も可能となる。
【００３９】
また、本発明では、バッファ解放要求に伴うバッファチェインへのつなぎこみ時に、解放するバッファ内の任意のメモリの内容を読み出し、読み出した値を再び同じメモリに書き込んでから、メモリ保護を設定することにより、バッファの２重解放を検出することが可能となる。
【００４０】
さらには、バッファ捕捉要求において、運用バッファが全て使用中の時は、待機バッファの捕捉は行わず、捕捉要求元にバッファ捕捉失敗を返却するようにすれば、待機空きバッファチェインに組み込まれているバッファは常にメモリ保護にかかっていることなるため、不正アクセス検出能力が向上する。
【図面の簡単な説明】
【図１】本発明を適用したシステムの一実施例を示す図である。
【図２】図１における運用空きバッファチェイン管理テーブルの構成例を示す図である。
【図３】図１における待機空きバッファチェイン管理テーブルの構成例を示す図である。
【図４】図１におけるバッファ管理テーブルの具体的構成例を示す図である。
【図５】図１におけるバッファ領域の具体的構成例を示す図である。
【図６】図１におけるバッファ管理情報初期設定部の処理フローを示す図である。
【図７】バッファ管理情報初期設定処理が実行された後の各管理テーブルとバッファ領域の具体的構成例を示す図である。
【図８】図１におけるバッファ捕捉部の処理フローを示す図である。
【図９】バッファ捕捉処理が実行された後の各管理テーブルとバッファ領域の具体的構成例を示す図である。
【図１０】図１におけるバッファ解放部の処理フローを示す図である。
【図１１】バッファ解放処理が実行された後の、各管理テーブルとバッファ領域の具体的構成例を示す図である。
【符号の説明】
１０１  ホストコンピュータ
１０２  端末装置
１０４  通信制御部
１０５  バッファ捕捉部
１０６  バッファ解放部
１０７  バッファ管理情報初期設定部
１０９  運用空きバッファチェイン管理テーブル
１１０  待機空きバッファチェイン管理テーブル
１１１  バッファ管理テーブル
１１２  バッファ領域
４００〜４０６  バッファ管理テーブル
５００〜５０６  バッファ
【図１】
0003660173.tif 000002
【図２】
0003660173.tif 000003
【図３】
0003660173.tif 000004
【図４】
0003660173.tif 000005
【図５】
0003660173.tif 000006
【図６】
0003660173.tif 000007
【図７】
0003660173.tif 000008
【図８】
0003660173.tif 000009
【図９】
0003660173.tif 000010
【図１０】
0003660173.tif 000011
【図１１】
0003660173.tif 000012