「Use After Free」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「Use After Free (use-after-free, 解放済みメモリ使用) とは、メモリを解放した後で、開放した領域を使用してしまうことをいい...」)
 
 
行7: 行7:
  
 
== 概要 ==
 
== 概要 ==
 
 
[[Use After Free]] は、 すでに解放(free)したポインタを使用することです。
 
[[Use After Free]] は、 すでに解放(free)したポインタを使用することです。
  
行13: 行12:
  
 
== 例 1 ==
 
== 例 1 ==
 
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
#include <stdio.h>
 
#include <stdio.h>
行51: 行49:
  
 
== 関連項目 ==
 
== 関連項目 ==
 +
* [[Heap Spray]]
 
* [[脆弱性]]
 
* [[脆弱性]]
 
* [[バッファオーバーフロー]](Buffer Overflow)
 
* [[バッファオーバーフロー]](Buffer Overflow)

2014年12月20日 (土) 02:36時点における最新版

Use After Free (use-after-free, 解放済みメモリ使用) とは、メモリを解放した後で、開放した領域を使用してしまうことをいいます。解放済のメモリを参照するとプログラムがクラッシュする可能性があります。

読み方

Use After Free
ゆーず あふたー ふりー
解放済みメモリ使用
かいほうずみ めもり しよう

概要

Use After Free は、 すでに解放(free)したポインタを使用することです。

解放した、もしくは削除したあとでヒープに確保したメモリを使うと、システムは未定義の振る舞いをします。

例 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define BUF1	512
#define BUF2	((BUF1/2) - 8)
int
main (int argc, char *argv[]) {
	char *b1 = (char *) malloc(BUF1);
	char *b2 = (char *) malloc(BUF1);
	free (b2);
	char *b3 = (char *) malloc(BUF2);
	char *b4 = (char *) malloc(BUF2);
	strncpy (b2, argv[1], BUF1-1);
	free (b1);
	free (b2);
	free (b3);
	return 0;
}

例 1

int abrt = 0;
char *ptr = (char *) malloc (SIZE);
if (err) {
	abrt = 1;
	free(ptr);
}
...
if (abrt) {
	logError ("abort", ptr);
}

関連項目