From 3c3348a98e82fbcb6b10e2c74ade47cb3c1fbf13 Mon Sep 17 00:00:00 2001 From: Michael Tautschnig Date: Mon, 26 Nov 2018 14:37:41 +0000 Subject: [PATCH] Detect use of free() with alloca-allocated objects As we internally use dynamic allocation, we previously did not distinguish alloca-allocated from malloc/calloc-allocated ones. --- regression/cbmc/alloca1/main.c | 12 ++++++++++++ regression/cbmc/alloca1/test.desc | 10 ++++++++++ regression/cbmc/function-return-no-body1/test.desc | 4 ++-- .../goto-analyzer/constant_propagation_01/test.desc | 2 +- .../goto-analyzer/constant_propagation_02/test.desc | 2 +- .../goto-analyzer/constant_propagation_03/test.desc | 2 +- .../goto-analyzer/constant_propagation_04/test.desc | 2 +- .../goto-analyzer/constant_propagation_07/test.desc | 2 +- .../goto-analyzer/constant_propagation_12/test.desc | 2 +- src/ansi-c/ansi_c_internal_additions.cpp | 1 + src/ansi-c/library/stdlib.c | 11 +++++++++++ src/cpp/cpp_internal_additions.cpp | 1 + 12 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 regression/cbmc/alloca1/main.c create mode 100644 regression/cbmc/alloca1/test.desc diff --git a/regression/cbmc/alloca1/main.c b/regression/cbmc/alloca1/main.c new file mode 100644 index 00000000000..014bf955d14 --- /dev/null +++ b/regression/cbmc/alloca1/main.c @@ -0,0 +1,12 @@ +#include + +#ifdef _WIN32 +void *alloca(size_t alloca_size); +#endif + +int main() +{ + int *p = alloca(sizeof(int)); + *p = 42; + free(p); +} diff --git a/regression/cbmc/alloca1/test.desc b/regression/cbmc/alloca1/test.desc new file mode 100644 index 00000000000..66fa40a9537 --- /dev/null +++ b/regression/cbmc/alloca1/test.desc @@ -0,0 +1,10 @@ +CORE +main.c +--pointer-check +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +free called for stack-allocated object: FAILURE$ +^\*\* 1 of 12 failed +-- +^warning: ignoring diff --git a/regression/cbmc/function-return-no-body1/test.desc b/regression/cbmc/function-return-no-body1/test.desc index a7f228211dc..17f1370937f 100644 --- a/regression/cbmc/function-return-no-body1/test.desc +++ b/regression/cbmc/function-return-no-body1/test.desc @@ -5,7 +5,7 @@ activate-multi-line-match ^EXIT=10$ ^SIGNAL=0$ VERIFICATION FAILED -