[PATCH] D132907: [msan] Add more specific messages for use-after-destroy
This revision was automatically updated to reflect the committed changes. Closed by commit rGc059ede28ea8: [msan] Add more specific messages for use-after-destroy (authored by vitalybuka). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132907/new/ https://reviews.llvm.org/D132907 Files: clang/lib/CodeGen/CGClass.cpp clang/test/CodeGenCXX/sanitize-dtor-bit-field.cpp clang/test/CodeGenCXX/sanitize-dtor-callback.cpp clang/test/CodeGenCXX/sanitize-dtor-derived-class.cpp clang/test/CodeGenCXX/sanitize-dtor-nontrivial-virtual-base.cpp clang/test/CodeGenCXX/sanitize-dtor-tail-call.cpp clang/test/CodeGenCXX/sanitize-dtor-trivial-base.cpp clang/test/CodeGenCXX/sanitize-dtor-trivial.cpp clang/test/CodeGenCXX/sanitize-dtor-vtable.cpp clang/test/CodeGenCXX/sanitize-dtor-zero-size-field.cpp compiler-rt/include/sanitizer/msan_interface.h compiler-rt/lib/msan/msan.h compiler-rt/lib/msan/msan_interceptors.cpp compiler-rt/lib/msan/msan_interface_internal.h compiler-rt/lib/msan/msan_report.cpp compiler-rt/test/msan/dtor-base-access.cpp compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp compiler-rt/test/msan/use-after-dtor.cpp Index: compiler-rt/test/msan/use-after-dtor.cpp === --- compiler-rt/test/msan/use-after-dtor.cpp +++ compiler-rt/test/msan/use-after-dtor.cpp @@ -32,7 +32,7 @@ // CHECK-UAD: WARNING: MemorySanitizer: use-of-uninitialized-value // CHECK-UAD: {{#0 0x.* in main.*use-after-dtor.cpp:}}[[@LINE-3]] - // CHECK-ORIGINS: Memory was marked as uninitialized + // CHECK-ORIGINS: Member fields were destroyed // CHECK-ORIGINS: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK-ORIGINS: {{#1 0x.* in .*~Simple.*cpp:}}[[@LINE-18]]: Index: compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp === --- compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp +++ compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp @@ -51,8 +51,8 @@ // This fails #ifdef CVPTR c->A_Foo(); -// CVPTR: Memory was marked as uninitialized -// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// CVPTR: Virtual table ptr was destroyed +// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // CVPTR: {{#1 0x.* in ~C .*cpp:}}[[@LINE-28]]: // CVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif @@ -63,16 +63,16 @@ // Both of these fail #ifdef EAVPTR e->A_Foo(); -// EAVPTR: Memory was marked as uninitialized -// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EAVPTR: Virtual table ptr was destroyed +// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EAVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-25]]: // EAVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif #ifdef EDVPTR e->D_Foo(); -// EDVPTR: Memory was marked as uninitialized -// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EDVPTR: Virtual table ptr was destroyed +// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EDVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-33]]: // EDVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-15]]: #endif Index: compiler-rt/test/msan/dtor-base-access.cpp === --- compiler-rt/test/msan/dtor-base-access.cpp +++ compiler-rt/test/msan/dtor-base-access.cpp @@ -66,17 +66,17 @@ assert(__msan_test_shadow(>d, sizeof(g->d)) == 0); __msan_print_shadow(>tb0, sizeof(g->tb0)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-20]]: __msan_print_shadow(>b, sizeof(g->b)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Base.*cpp:}}[[@LINE-33]]: __msan_print_shadow(>tb1, sizeof(g->tb1)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-30]]: Index: compiler-rt/lib/msan/msan_report.cpp === --- compiler-rt/lib/msan/msan_report.cpp +++ compiler-rt/lib/msan/msan_report.cpp @@ -81,6 +81,13 @@ Printf(" %sMemory was marked as uninitialized%s\n", d.Origin(), d.Default()); break; + case STACK_TRACE_TAG_FIELDS: +Printf(" %sMember fields were destroyed%s\n", d.Origin(), d.Default()); +break; + case STACK_TRACE_TAG_VPTR: +Printf(" %sVirtual table ptr was destroyed%s\n", d.Origin(), + d.Default()); +break; default: Printf(" %sUninitialized value was created%s\n", d.Origin(), d.Default()); Index:
[PATCH] D132907: [msan] Add more specific messages for use-after-destroy
vitalybuka added inline comments. Comment at: clang/lib/CodeGen/CGClass.cpp:1773 // function - EmitSanitizerDtorCallback(CGF, VTablePtr, PoisonSize); + EmitSanitizerDtorCallback(CGF, "__sanitizer_dtor_callback_vptr", +VTablePtr); kstoimenov wrote: > Should this be a constant? it would be nice if we can share constants with runtime, but as is clang/compiler-rt do not include each other without reuse I don't see a point in named constant. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132907/new/ https://reviews.llvm.org/D132907 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132907: [msan] Add more specific messages for use-after-destroy
kstoimenov accepted this revision. kstoimenov added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/CodeGen/CGClass.cpp:1773 // function - EmitSanitizerDtorCallback(CGF, VTablePtr, PoisonSize); + EmitSanitizerDtorCallback(CGF, "__sanitizer_dtor_callback_vptr", +VTablePtr); Should this be a constant? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132907/new/ https://reviews.llvm.org/D132907 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D132907: [msan] Add more specific messages for use-after-destroy
vitalybuka updated this revision to Diff 456540. vitalybuka added a comment. rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132907/new/ https://reviews.llvm.org/D132907 Files: clang/lib/CodeGen/CGClass.cpp clang/test/CodeGenCXX/sanitize-dtor-bit-field.cpp clang/test/CodeGenCXX/sanitize-dtor-callback.cpp clang/test/CodeGenCXX/sanitize-dtor-derived-class.cpp clang/test/CodeGenCXX/sanitize-dtor-nontrivial-virtual-base.cpp clang/test/CodeGenCXX/sanitize-dtor-tail-call.cpp clang/test/CodeGenCXX/sanitize-dtor-trivial-base.cpp clang/test/CodeGenCXX/sanitize-dtor-trivial.cpp clang/test/CodeGenCXX/sanitize-dtor-vtable.cpp clang/test/CodeGenCXX/sanitize-dtor-zero-size-field.cpp compiler-rt/include/sanitizer/msan_interface.h compiler-rt/lib/msan/msan.h compiler-rt/lib/msan/msan_interceptors.cpp compiler-rt/lib/msan/msan_interface_internal.h compiler-rt/lib/msan/msan_report.cpp compiler-rt/test/msan/dtor-base-access.cpp compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp compiler-rt/test/msan/use-after-dtor.cpp Index: compiler-rt/test/msan/use-after-dtor.cpp === --- compiler-rt/test/msan/use-after-dtor.cpp +++ compiler-rt/test/msan/use-after-dtor.cpp @@ -32,7 +32,7 @@ // CHECK-UAD: WARNING: MemorySanitizer: use-of-uninitialized-value // CHECK-UAD: {{#0 0x.* in main.*use-after-dtor.cpp:}}[[@LINE-3]] - // CHECK-ORIGINS: Memory was marked as uninitialized + // CHECK-ORIGINS: Member fields were destroyed // CHECK-ORIGINS: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK-ORIGINS: {{#1 0x.* in .*~Simple.*cpp:}}[[@LINE-18]]: Index: compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp === --- compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp +++ compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp @@ -51,8 +51,8 @@ // This fails #ifdef CVPTR c->A_Foo(); -// CVPTR: Memory was marked as uninitialized -// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// CVPTR: Virtual table ptr was destroyed +// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // CVPTR: {{#1 0x.* in ~C .*cpp:}}[[@LINE-28]]: // CVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif @@ -63,16 +63,16 @@ // Both of these fail #ifdef EAVPTR e->A_Foo(); -// EAVPTR: Memory was marked as uninitialized -// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EAVPTR: Virtual table ptr was destroyed +// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EAVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-25]]: // EAVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif #ifdef EDVPTR e->D_Foo(); -// EDVPTR: Memory was marked as uninitialized -// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EDVPTR: Virtual table ptr was destroyed +// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EDVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-33]]: // EDVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-15]]: #endif Index: compiler-rt/test/msan/dtor-base-access.cpp === --- compiler-rt/test/msan/dtor-base-access.cpp +++ compiler-rt/test/msan/dtor-base-access.cpp @@ -66,17 +66,17 @@ assert(__msan_test_shadow(>d, sizeof(g->d)) == 0); __msan_print_shadow(>tb0, sizeof(g->tb0)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-20]]: __msan_print_shadow(>b, sizeof(g->b)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Base.*cpp:}}[[@LINE-33]]: __msan_print_shadow(>tb1, sizeof(g->tb1)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-30]]: Index: compiler-rt/lib/msan/msan_report.cpp === --- compiler-rt/lib/msan/msan_report.cpp +++ compiler-rt/lib/msan/msan_report.cpp @@ -81,6 +81,13 @@ Printf(" %sMemory was marked as uninitialized%s\n", d.Origin(), d.Default()); break; + case STACK_TRACE_TAG_FIELDS: +Printf(" %sMember fields were destroyed%s\n", d.Origin(), d.Default()); +break; + case STACK_TRACE_TAG_VPTR: +Printf(" %sVirtual table ptr was destroyed%s\n", d.Origin(), + d.Default()); +break; default: Printf(" %sUninitialized value was created%s\n", d.Origin(), d.Default()); Index: compiler-rt/lib/msan/msan_interface_internal.h === ---
[PATCH] D132907: [msan] Add more specific messages for use-after-destroy
vitalybuka created this revision. Herald added a subscriber: Enna1. Herald added a project: All. vitalybuka requested review of this revision. Herald added projects: clang, Sanitizers. Herald added subscribers: Sanitizers, cfe-commits. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D132907 Files: clang/lib/CodeGen/CGClass.cpp clang/test/CodeGenCXX/sanitize-dtor-bit-field.cpp clang/test/CodeGenCXX/sanitize-dtor-callback.cpp clang/test/CodeGenCXX/sanitize-dtor-derived-class.cpp clang/test/CodeGenCXX/sanitize-dtor-nontrivial-virtual-base.cpp clang/test/CodeGenCXX/sanitize-dtor-tail-call.cpp clang/test/CodeGenCXX/sanitize-dtor-trivial-base.cpp clang/test/CodeGenCXX/sanitize-dtor-vtable.cpp clang/test/CodeGenCXX/sanitize-dtor-zero-size-field.cpp compiler-rt/include/sanitizer/msan_interface.h compiler-rt/lib/msan/msan.h compiler-rt/lib/msan/msan_interceptors.cpp compiler-rt/lib/msan/msan_interface_internal.h compiler-rt/lib/msan/msan_report.cpp compiler-rt/test/msan/dtor-base-access.cpp compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp compiler-rt/test/msan/use-after-dtor.cpp Index: compiler-rt/test/msan/use-after-dtor.cpp === --- compiler-rt/test/msan/use-after-dtor.cpp +++ compiler-rt/test/msan/use-after-dtor.cpp @@ -32,7 +32,7 @@ // CHECK-UAD: WARNING: MemorySanitizer: use-of-uninitialized-value // CHECK-UAD: {{#0 0x.* in main.*use-after-dtor.cpp:}}[[@LINE-3]] - // CHECK-ORIGINS: Memory was marked as uninitialized + // CHECK-ORIGINS: Member fields were destroyed // CHECK-ORIGINS: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK-ORIGINS: {{#1 0x.* in .*~Simple.*cpp:}}[[@LINE-18]]: Index: compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp === --- compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp +++ compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp @@ -51,8 +51,8 @@ // This fails #ifdef CVPTR c->A_Foo(); -// CVPTR: Memory was marked as uninitialized -// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// CVPTR: Virtual table ptr was destroyed +// CVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // CVPTR: {{#1 0x.* in ~C .*cpp:}}[[@LINE-28]]: // CVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif @@ -63,16 +63,16 @@ // Both of these fail #ifdef EAVPTR e->A_Foo(); -// EAVPTR: Memory was marked as uninitialized -// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EAVPTR: Virtual table ptr was destroyed +// EAVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EAVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-25]]: // EAVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-7]]: #endif #ifdef EDVPTR e->D_Foo(); -// EDVPTR: Memory was marked as uninitialized -// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback}} +// EDVPTR: Virtual table ptr was destroyed +// EDVPTR: {{#0 0x.* in __sanitizer_dtor_callback_vptr}} // EDVPTR: {{#1 0x.* in ~E .*cpp:}}[[@LINE-33]]: // EDVPTR: {{#2 0x.* in main .*cpp:}}[[@LINE-15]]: #endif Index: compiler-rt/test/msan/dtor-base-access.cpp === --- compiler-rt/test/msan/dtor-base-access.cpp +++ compiler-rt/test/msan/dtor-base-access.cpp @@ -66,17 +66,17 @@ assert(__msan_test_shadow(>d, sizeof(g->d)) == 0); __msan_print_shadow(>tb0, sizeof(g->tb0)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-20]]: __msan_print_shadow(>b, sizeof(g->b)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Base.*cpp:}}[[@LINE-33]]: __msan_print_shadow(>tb1, sizeof(g->tb1)); - // CHECK: Memory was marked as uninitialized + // CHECK: Member fields were destroyed // CHECK: {{#0 0x.* in __sanitizer_dtor_callback}} // CHECK: {{#1 0x.* in .*~Derived.*cpp:}}[[@LINE-30]]: Index: compiler-rt/lib/msan/msan_report.cpp === --- compiler-rt/lib/msan/msan_report.cpp +++ compiler-rt/lib/msan/msan_report.cpp @@ -81,6 +81,13 @@ Printf(" %sMemory was marked as uninitialized%s\n", d.Origin(), d.Default()); break; + case STACK_TRACE_TAG_FIELDS: +Printf(" %sMember fields were destroyed%s\n", d.Origin(), d.Default()); +break; + case STACK_TRACE_TAG_VPTR: +Printf(" %sVirtual table ptr was destroyed%s\n", d.Origin(), + d.Default()); +break; default: Printf(" %sUninitialized value was created%s\n", d.Origin(), d.Default()); Index: compiler-rt/lib/msan/msan_interface_internal.h ===