Recommended
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Introduction to Initramfs - Initramfs-tools and Dracut
PDF
PDF
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PPTX
PDF
effective modern c++ chapeter36
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
PDF
PDF
PDF
PDF
PDF
ODP
PDF
PDF
Cybozu Tech Conference 2016 バグの調べ方
PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
PDF
PDF
PDF
PDF
Backdoors with the MS Office file encryption master key and a proposal for a ...
PDF
More Related Content What's hot
PDF
PDF
Introduction to Initramfs - Initramfs-tools and Dracut
PDF
PDF
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PPTX
PDF
effective modern c++ chapeter36
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
PDF
PDF
PDF
PDF
PDF
ODP
PDF
PDF
Cybozu Tech Conference 2016 バグの調べ方
PDF
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
PDF
PDF
PDF
Viewers also liked
PDF
Backdoors with the MS Office file encryption master key and a proposal for a ...
PDF
PDF
PDF
PDF
PDF
PDF
『データ解析におけるプライバシー保護』勉強会 #2
PDF
改ざん検知暗号Minalpherの設計とIvy Bridge/Haswellでの最適化
PDF
PDF
PDF
MS Officeファイル暗号化のマスター鍵を利用したバックドアとその対策
PDF
PDF
PDF
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
PDF
PDF
Cプログラマのためのカッコつけないプログラミングの勧め
PDF
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
PDF
Similar to Memory sanitizer
PDF
PDF
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
PDF
Intel AVX2を使用したailia sdkの最適化
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
PDF
SpectreBustersあるいはLinuxにおけるSpectre対策
PPTX
Statically detecting vulnerability under memory pressure usingexhaustive search
PDF
PDF
PDF
PDF
第11回 配信講義 計算科学技術特論B(2022)
PDF
PDF
More from MITSUNARI Shigeo
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
PDF
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
PDF
PDF
PDF
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
PDF
PDF
PDF
Intro to SVE 富岳のA64FXを触ってみた
PDF
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
Memory sanitizer 1. 2. 3. 4. 5. 6. false positiveを出さない方針
その条件の元でできるだけfalse negativeを減らす
記号 : A = B op C(オリジナル), A', B', C':shadow
6/11
Shadow propagation rule
命令 ルール
A = load P check P', load (P & shadowMask)
*P = A check P', *(P & shadowMask) = A'
A = const A' = 0
A = undef A' = 0xff
A = B & C A' = (B'&C')|(B&C')|(B'&C)
A = B | C A' = (B'&C')|(~B&C')|(B'&~C)
A = B ^ C A' = B' | C'
A = B << C A' = (sign extend(C'!=0))|(B'<<C)
7. A = B * (C * (1 << D))
A' = B' << Dで代用(一般はA' = B'| C')
bitwiseにやってるとfalse positiveになる例
clangはこれを *(unsigned char*)s > 7と最適化する
X : unsigned, X':対応するshadowのとき
Xのとり得る範囲は[VMin(X, X'), VMax(X, X')]
VMin(X, X') = X & (~X')
VMax(X, X') = X | X'
正確だがベンチマークで50%の速度低下
7/11
複雑なパターン(1/2)
struct S { int a:3; int b:5; };
bool f(S* s) { return s->b; }
8. 等号比較
A = B == Cを
D = B ^ C, A = D == 0に変換
D' = B'|C', A'=(!(D & ~D')) && (D' != 0)
条件演算子
A = B ? C : D
BがundefでもCとDが同じでdefならAはdefになる
A' = B' ? ((C ^ D) | C' | D') : (B ? C' : D')
8/11
複雑なパターン(2/2)
9. 10. 11. 未初期化参照が分かってもそれがどこにあった
か分からないと辛い
源流を保持する
11/11
origin tracking
#include <stdio.h>
int arr[2];
void shift() { arr[1] = arr[0]; }
void push(int *p) {
shift();
arr[0] = *p;
}
int pop() {
int x = arr[1];
shift();
return x;
}
void func1() {
int local_var;
push(&local_var);
}
int main() {
func1();
shift();
return pop();
}
clang-3.5 -fsanitize-memory-track-origins=2 -g -fsanitize=memory t.c
&& ./a.out
==22068== WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x7f87ee79de13 (/home/shigeo/a.out+0x8ee13)
#1 0x7f87ed600ec4 (/lib/x86_64-linux-gnu/libc.so.6+0x21ec4)
#2 0x7f87ee79d7bc (/home/shigeo/a.out+0x8e7bc)
...
Uninitialized value was created by an allocation of 'local_var' in
the stack frame of function 'func1'
#0 0x7f87ee79dce0 (/home/shigeo/a.out+0x8ece0)
SUMMARY: MemorySanitizer: use-of-uninitialized-value ??:0 ??
ちなみにgcc t.c -Wall –Wextraでは警告は何もでない。
% valgrind --track-origins=yes ./a.out
==22149== Syscall param exit_group(status) contains uninitialised
byte(s)
==22149== at 0x4EF8309: _Exit (_exit.c:32)
==22149== by 0x4E7321A: __run_exit_handlers (exit.c:97)
==22149== by 0x4E732A4: exit (exit.c:104)
==22149== by 0x4E58ECB: (below main) (libc-start.c:321)
==22149== Uninitialised value was created by a stack allocation
==22149== at 0x400560: func1 (t.c:13)