stack-use-after-scop

具体例: ローカル変数のアドレスを解放後にも操作しようとしてエラー

レポート結果

ログからわかること

・対象のプロセスIDは 41703
・アドレス 0x7ffee0680960 において、stack-use-after-scope を検出した
・PCレジスタが 0x00010f57fe49, BPレジスタが 0x7ffee0680930, SPレジスタが 0x7ffee0680928 の状態だった

・スレッドT0(メインスレッドのこと)で発生
・4バイトの読み込みをしようとした時にアドレス0x7ffee0680960が違反した事を検知した
・test81.cpp の 10行目から呼び出された処理で発生
・アドレス 0x7ffee0680960 は スレッド T0 のこのフレームの32バイト目に位置している。
・test81.cpp の 1行目で確保されている。
・このフレームには、6行目で宣言されている’localScopeVariable’という変数がある。

【SUMMARY 以降】
・違反になったアドレスより前の領域は使用可能領域より左(?!)のスタック領域(f1)
・違反になったアドレスは使用後のスタック領域(f8)
・違反になったアドレスより後の領域は使用可能領域より右(?!)のスタック領域(f3)

【ログから推測できる不具合の内容】

・スコープ外までポインタアドレスを引き回している

参考)上記のログを発生させたソースコード

int main(int argc, char *argv[]) { int i; int *intPtr; for (i = 0; i < 10; i++) { int localScopeVariable = i; intPtr = &localScopeVariable; } i = *intPtr; return 0; } [/code]

参考)コンパイル・実行例

$ clang++ -g -O0 -o test81 -fsanitize=address test81.cpp
$ ./test81

コメントを残す

メールアドレスが公開されることはありません。