Add memcheck errors for aligned and sized allocations and deallocations
commita265a206203003cc0433f786478fe81a6cc3298a
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 12 Mar 2023 07:26:04 +0000 (12 08:26 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 2 Sep 2023 14:12:35 +0000 (2 16:12 +0200)
treef1b5d7448fbdfe50da15c113d2a99ae271c0f195
parent6489bc63a13fcf614cdb1cb318ea9a1f898a39cd
Add memcheck errors for aligned and sized allocations and deallocations

Bug 433857 Add validation to C++17 aligned new/delete alignment size
Bug 433859 Add mismatched detection to C++ 17 aligned new/delete
Bug 466105 aligned_alloc problems, part 2
Bug 467441 Add mismatched detection to C++ 14 sized delete

Memcheck now tests and warns about the values used for
alignment and size. These apply to various functions: memalign,
posix_memalign and aligned_alloc in C and various overloads
of operators new and delete in C++. The kinds of error that can
be detected are
- invalid alignment, for instance the alignment is usually required
  to be a power of 2
- mismatched alignment between aligned allocation and aligned
  deallocation
- mismatched size when sized delete is used
- bad size for functions that have implementation defined behaviour
  when the requested size is zero

An example of the new errors is:

int *pi = memalign(31, 100);

which will generate the following error

==96206== Invalid alignment value: 31 (should be power of 2)
==96206==    at 0x485195E: memalign (vg_replace_malloc.c:1886)
==96206==    by 0x20200E: main (memalign.c:59)
104 files changed:
.gitignore
NEWS
coregrind/m_replacemalloc/vg_replace_malloc.c
coregrind/m_tooliface.c
coregrind/pub_core_replacemalloc.h
coregrind/pub_core_tooliface.h
dhat/dh_main.c
drd/drd_malloc_wrappers.c
helgrind/hg_main.c
include/pub_tool_replacemalloc.h
include/pub_tool_tooliface.h
massif/ms_main.c
memcheck/docs/mc-manual.xml
memcheck/mc_errors.c
memcheck/mc_include.h
memcheck/mc_main.c
memcheck/mc_malloc_wrappers.c
memcheck/memcheck.h
memcheck/tests/Makefile.am
memcheck/tests/duplicate_align_size_errors.cpp [new file with mode: 0644]
memcheck/tests/filter_size_t
memcheck/tests/filter_stanza_and_size_t [new file with mode: 0755]
memcheck/tests/filter_used_supp [new file with mode: 0755]
memcheck/tests/filter_xml
memcheck/tests/freebsd/Makefile.am
memcheck/tests/freebsd/aligned_alloc.c [new file with mode: 0644]
memcheck/tests/freebsd/aligned_alloc.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/aligned_alloc.vgtest [new file with mode: 0644]
memcheck/tests/freebsd/aligned_alloc_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/aligned_alloc_xml.vgtest [new file with mode: 0644]
memcheck/tests/freebsd/aligned_allocs_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/aligned_allocs_supp.supp [new file with mode: 0644]
memcheck/tests/freebsd/aligned_allocs_supp.vgtest [new file with mode: 0644]
memcheck/tests/freebsd/bug470713.cpp
memcheck/tests/freebsd/delete_sized_mismatch.cpp [new file with mode: 0644]
memcheck/tests/freebsd/delete_sized_mismatch.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/delete_sized_mismatch.vgtest [new file with mode: 0644]
memcheck/tests/freebsd/delete_sized_mismatch_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/delete_sized_mismatch_xml.vgtest [new file with mode: 0644]
memcheck/tests/freebsd/errno_aligned_allocs.c
memcheck/tests/freebsd/errno_aligned_allocs.stderr.exp
memcheck/tests/freebsd/memalign.stderr.exp
memcheck/tests/freebsd/memalign_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/freebsd/memalign_supp.supp [new file with mode: 0644]
memcheck/tests/freebsd/memalign_supp.vgtest [new file with mode: 0644]
memcheck/tests/linux/Makefile.am
memcheck/tests/linux/aligned_alloc.stderr.exp-musl [new file with mode: 0644]
memcheck/tests/linux/memalign.c
memcheck/tests/linux/memalign.stderr.exp
memcheck/tests/linux/memalign.stderr.exp-musl [new file with mode: 0644]
memcheck/tests/memalign_args.stderr.exp-darwin
memcheck/tests/mismatches.cpp
memcheck/tests/mismatches.stderr.exp2 [new file with mode: 0644]
memcheck/tests/mismatches_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/mismatches_xml.stderr.exp2 [new file with mode: 0644]
memcheck/tests/mismatches_xml.vgtest [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size.cpp [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size.stderr.exp [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size.vgtest [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size_supp.stderr.exp_32 [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size_supp.supp [new file with mode: 0644]
memcheck/tests/new_delete_mismatch_size_supp.vgtest [new file with mode: 0644]
memcheck/tests/posix_memalign.c
memcheck/tests/posix_memalign.stderr.exp
memcheck/tests/posix_memalign.stderr.exp-darwin [new file with mode: 0644]
memcheck/tests/posix_memalign.vgtest
memcheck/tests/posix_memalign_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/posix_memalign_supp.supp [new file with mode: 0644]
memcheck/tests/posix_memalign_supp.vgtest [new file with mode: 0644]
memcheck/tests/posix_memalign_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/posix_memalign_xml.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_args.vgtest
memcheck/tests/sized_aligned_new_delete_misaligned.stderr.exp [deleted file]
memcheck/tests/sized_aligned_new_delete_misaligned.vgtest [deleted file]
memcheck/tests/sized_aligned_new_delete_misaligned1.cpp [moved from memcheck/tests/sized_aligned_new_delete_misaligned.cpp with 67% similarity]
memcheck/tests/sized_aligned_new_delete_misaligned1.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_supp.stderr.exp_32 [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_supp.supp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_supp.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned1_xml.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2.cpp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_supp.stderr.exp_32 [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_supp.supp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_supp.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned2_xml.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3.cpp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_supp.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_supp.stderr.exp_32 [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_supp.supp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_supp.vgtest [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_xml.stderr.exp [new file with mode: 0644]
memcheck/tests/sized_aligned_new_delete_misaligned3_xml.vgtest [new file with mode: 0644]
memcheck/tests/solaris/aligned_alloc.stderr.exp
memcheck/tests/solaris/memalign.stderr.exp