forked from OSchip/llvm-project
[Asan] Unpoison red zones even if use-after-scope was disabled with runtime flag
Summary: PR27453 Reviewers: eugenis Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D23481 llvm-svn: 278818
This commit is contained in:
parent
1e5b2d1611
commit
1ce73ef11c
|
@ -2186,12 +2186,13 @@ void FunctionStackPoisoner::poisonStack() {
|
|||
poisonRedZones(L.ShadowBytes, IRB, ShadowBase, true);
|
||||
|
||||
auto UnpoisonStack = [&](IRBuilder<> &IRB) {
|
||||
// Do this always as poisonAlloca can be disabled with
|
||||
// detect_stack_use_after_scope=0.
|
||||
poisonRedZones(L.ShadowBytes, IRB, ShadowBase, false);
|
||||
if (HavePoisonedStaticAllocas) {
|
||||
// If we poisoned some allocas in llvm.lifetime analysis,
|
||||
// unpoison whole stack frame now.
|
||||
poisonAlloca(LocalStackBase, LocalStackSize, IRB, false);
|
||||
} else {
|
||||
poisonRedZones(L.ShadowBytes, IRB, ShadowBase, false);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -28,9 +28,9 @@ entry:
|
|||
; CHECK-UAS: call void @__asan_poison_stack_memory(i64 %{{[^ ]+}}, i64 1)
|
||||
|
||||
; Unpoison memory at function exit in UAS mode.
|
||||
; CHECK-UAS: call void @__asan_unpoison_stack_memory(i64 %{{[^ ]+}}, i64 64)
|
||||
; CHECK-UAS: ret void
|
||||
|
||||
; CHECK-UAS: store i64 0
|
||||
; CHECK-UAS-NEXT: call void @__asan_unpoison_stack_memory(i64 %{{[^ ]+}}, i64 64)
|
||||
; CHECK-UAS: ret i32 0
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
|
|
|
@ -108,7 +108,11 @@ entry:
|
|||
; CHECK: __asan_poison_stack_memory
|
||||
|
||||
ret void
|
||||
; CHECK: __asan_unpoison_stack_memory
|
||||
; CHECK: store i64 0
|
||||
; CHECK: store i64 0
|
||||
; CHECK: store i64 0
|
||||
; CHECK: store i32 0
|
||||
; CHECK-NEXT: __asan_unpoison_stack_memory
|
||||
}
|
||||
|
||||
define void @zero_sized(i64 %a) #0 {
|
||||
|
|
Loading…
Reference in New Issue