二重解放の脆弱性

読み:にじゅうかいほうのぜいじゃくせい
外語:double-free vulnerability 英語
品詞:名詞

セキュリティホールの一つ。同じメモリー領域を、二重に解放(使用済のメモリー領域をシステムに返却)すること。

目次

Cの場合、一般に、メモリーの確保はmalloc関数、解放はfree関数を使う。

一度free関数で解放されたポインターを再度free関数で解放しようとすると、メモリーの内容を大きく破壊することになり、大きなバグを引き起こす。任意の不正コードを実行させられる脆弱性を引き起こすこともあるとされる。

これが、二重解放の脆弱性である。

抜本的な解決法はないが、一度freeしたポインターには、すぐにNULL(あるいは相当するもの)を代入するのが経験上良いとされている。

free(p);

p = NULL;

free(NULL)は何もしないことが保証されているため、もしこの不具合を招くようなコードが存在したとしても、最悪の不具合を引き起こすことが無い。

但しこれも、マルチスレッドの処理がある場合は、freeとNULL代入の一瞬の間に不具合を起こす可能性もあるので、完全な解決法というわけでもない。過信は良い結果をもたらさない。

用語の所属
セキュリティホール
関連する用語
malloc

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club