From 577706252fe342b14e3f0d16ba6f89cb69c92041 Mon Sep 17 00:00:00 2001 From: Daniel Kroening Date: Tue, 12 Sep 2017 20:53:23 +0100 Subject: [PATCH] check that memory for memcpy, memset and memmove is accessible --- regression/cbmc/memset3/main.c | 12 ++++++++++++ regression/cbmc/memset3/test.desc | 10 ++++++++++ src/ansi-c/library/string.c | 8 ++++++++ 3 files changed, 30 insertions(+) create mode 100644 regression/cbmc/memset3/main.c create mode 100644 regression/cbmc/memset3/test.desc diff --git a/regression/cbmc/memset3/main.c b/regression/cbmc/memset3/main.c new file mode 100644 index 00000000000..baedd956f62 --- /dev/null +++ b/regression/cbmc/memset3/main.c @@ -0,0 +1,12 @@ +#include +#include +#include + +int main() +{ + int *A=malloc(sizeof(int)*4); + + memset(A+20, 0, sizeof(int)); // out-of-bounds + + return 0; +} diff --git a/regression/cbmc/memset3/test.desc b/regression/cbmc/memset3/test.desc new file mode 100644 index 00000000000..0c1bb9e7ab4 --- /dev/null +++ b/regression/cbmc/memset3/test.desc @@ -0,0 +1,10 @@ +CORE +main.c +--pointer-check +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +\[.*] dereference failure: pointer outside dynamic object bounds in .*: FAILURE +\*\* 1 of .* failed \(.*\) +-- +^warning: ignoring diff --git a/src/ansi-c/library/string.c b/src/ansi-c/library/string.c index 9145059ff0f..87eecf42c31 100644 --- a/src/ansi-c/library/string.c +++ b/src/ansi-c/library/string.c @@ -531,6 +531,8 @@ void *memcpy(void *dst, const void *src, size_t n) #else __CPROVER_assert(__CPROVER_POINTER_OBJECT(dst)!= __CPROVER_POINTER_OBJECT(src), "memcpy src/dst overlap"); + (void)*(char *)dst; // check that the memory is accessible + (void)*(const char *)src; // check that the memory is accessible //for(__CPROVER_size_t i=0; i