Skip to content

Commit f81f283

Browse files
authored
Revert "Reapply "[HWASan] remove incorrectly inferred attributes" (#106622)" (#106758)
Reverts #106624 caused timeouts
1 parent f1cf091 commit f81f283

File tree

10 files changed

+421
-451
lines changed

10 files changed

+421
-451
lines changed

clang/test/CodeGen/address-safety-attr-flavors.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,57 +28,57 @@ int HasSanitizeAddress() { return 1; }
2828
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
2929
// CHECK-ASAN: Function Attrs: mustprogress noinline nounwind sanitize_address
3030
// CHECK-KASAN: Function Attrs: mustprogress noinline nounwind sanitize_address
31-
// CHECK-HWASAN: Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress
32-
// CHECK-KHWASAN: Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress
31+
// CHECK-HWASAN: Function Attrs: mustprogress noinline nounwind sanitize_hwaddress
32+
// CHECK-KHWASAN: Function Attrs: mustprogress noinline nounwind sanitize_hwaddress
3333

3434
__attribute__((no_sanitize("address"))) int NoSanitizeQuoteAddress() {
3535
return 0;
3636
}
3737
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
3838
// CHECK-ASAN: {{Function Attrs: mustprogress noinline nounwind$}}
3939
// CHECK-KASAN: {{Function Attrs: mustprogress noinline nounwind$}}
40-
// CHECK-HWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
41-
// CHECK-KHWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
40+
// CHECK-HWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
41+
// CHECK-KHWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
4242

4343
__attribute__((no_sanitize_address)) int NoSanitizeAddress() { return 0; }
4444
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
4545
// CHECK-ASAN: {{Function Attrs: mustprogress noinline nounwind$}}
4646
// CHECK-KASAN: {{Function Attrs: mustprogress noinline nounwind$}}
47-
// CHECK-HWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
48-
// CHECK-KHWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
47+
// CHECK-HWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
48+
// CHECK-KHWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
4949

5050
__attribute__((no_sanitize("kernel-address"))) int NoSanitizeKernelAddress() {
5151
return 0;
5252
}
5353
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
5454
// CHECK-ASAN: {{Function Attrs: mustprogress noinline nounwind$}}
5555
// CHECK-KASAN: {{Function Attrs: mustprogress noinline nounwind$}}
56-
// CHECK-HWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
57-
// CHECK-KHWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind sanitize_hwaddress$}}
56+
// CHECK-HWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
57+
// CHECK-KHWASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_hwaddress$}}
5858

5959
__attribute__((no_sanitize("hwaddress"))) int NoSanitizeHWAddress() {
6060
return 0;
6161
}
6262
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
6363
// CHECK-ASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_address$}}
6464
// CHECK-KASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_address$}}
65-
// CHECK-HWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind$}}
66-
// CHECK-KHWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind$}}
65+
// CHECK-HWASAN: {{Function Attrs: mustprogress noinline nounwind$}}
66+
// CHECK-KHWASAN: {{Function Attrs: mustprogress noinline nounwind$}}
6767

6868
__attribute__((no_sanitize("kernel-hwaddress"))) int NoSanitizeKernelHWAddress() {
6969
return 0;
7070
}
7171
// CHECK-NOASAN: {{Function Attrs: mustprogress noinline nounwind$}}
7272
// CHECK-ASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_address$}}
7373
// CHECK-KASAN: {{Function Attrs: mustprogress noinline nounwind sanitize_address$}}
74-
// CHECK-HWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind$}}
75-
// CHECK-KHWASAN: {{Function Attrs: mustprogress nobuiltin noinline nounwind$}}
74+
// CHECK-HWASAN: {{Function Attrs: mustprogress noinline nounwind$}}
75+
// CHECK-KHWASAN: {{Function Attrs: mustprogress noinline nounwind$}}
7676

7777
__attribute__((disable_sanitizer_instrumentation)) int DisableSanitizerInstrumentation() {
7878
return 0;
7979
}
8080
// CHECK-NOASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress noinline nounwind$}}
8181
// CHECK-ASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress noinline nounwind$}}
8282
// CHECK-KASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress noinline nounwind$}}
83-
// CHECK-HWASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress nobuiltin noinline nounwind$}}
84-
// CHECK-KHWASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress nobuiltin noinline nounwind$}}
83+
// CHECK-HWASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress noinline nounwind$}}
84+
// CHECK-KHWASAN: {{Function Attrs: disable_sanitizer_instrumentation mustprogress noinline nounwind$}}

llvm/lib/Transforms/Instrumentation/HWAddressSanitizer.cpp

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -598,24 +598,6 @@ void HWAddressSanitizer::initializeModule() {
598598
LLVM_DEBUG(dbgs() << "Init " << M.getName() << "\n");
599599
TargetTriple = Triple(M.getTargetTriple());
600600

601-
for (auto &F : M.functions()) {
602-
// Remove memory attributes that are invalid with HWASan.
603-
// HWASan checks read from shadow, which invalidates memory(argmem: *)
604-
// Short granule checks on function arguments read from the argument memory
605-
// (last byte of the granule), which invalidates writeonly.
606-
//
607-
// This is not only true for sanitized functions, because AttrInfer can
608-
// infer those attributes on libc functions, which is not true if those
609-
// are instrumented (Android) or intercepted.
610-
611-
// nobuiltin makes sure later passes don't restore assumptions about
612-
// the function.
613-
F.addFnAttr(llvm::Attribute::NoBuiltin);
614-
F.removeFnAttr(llvm::Attribute::Memory);
615-
for (auto &A : F.args())
616-
A.removeAttr(llvm::Attribute::WriteOnly);
617-
}
618-
619601
// x86_64 currently has two modes:
620602
// - Intel LAM (default)
621603
// - pointer aliasing (heap only)
@@ -1640,6 +1622,14 @@ void HWAddressSanitizer::sanitizeFunction(Function &F,
16401622

16411623
assert(!ShadowBase);
16421624

1625+
// Remove memory attributes that are about to become invalid.
1626+
// HWASan checks read from shadow, which invalidates memory(argmem: *)
1627+
// Short granule checks on function arguments read from the argument memory
1628+
// (last byte of the granule), which invalidates writeonly.
1629+
F.removeFnAttr(llvm::Attribute::Memory);
1630+
for (auto &A : F.args())
1631+
A.removeAttr(llvm::Attribute::WriteOnly);
1632+
16431633
BasicBlock::iterator InsertPt = F.getEntryBlock().begin();
16441634
IRBuilder<> EntryIRB(&F.getEntryBlock(), InsertPt);
16451635
emitPrologue(EntryIRB,

0 commit comments

Comments
 (0)