Skip to content

Consecutive malloc allocations are not modelled correctly #204

Open
@lzaoral

Description

@lzaoral

The following piece of code contains an error but Symbiotic does not see it:

#include <assert.h>
#include <stdlib.h>

int main(void)
{
    void* a = malloc(sizeof(int));
    void* b = malloc(sizeof(int));
    if (a != NULL && b != NULL)
        assert(a != b);

    free(b);
    void* c = malloc(sizeof(int));
    if (a != NULL && c != NULL)
        assert(a != c);

    assert(b != c); /* can fail */
}

Output:

$ symbiotic symbiotic-mallocs.c
8.0.0-pre-llvm-12.0.1-symbiotic:13ca9347-dg:0b1ada38-sbt-slicer:b0864a5b-sbt-instrumentation:648fabcc-klee:6ecf91e2
INFO: Looking for reachability of calls to __assert_fail,__VERIFIER_error
INFO: Optimizations time: 0.01961374282836914
INFO: Starting slicing
INFO: Total slicing time: 0.02277660369873047
INFO: Optimizations time: 0.020235300064086914
INFO: After-slicing optimizations and transformations time: 2.1457672119140625e-05
INFO: Starting verification
KLEE: WARNING: undefined reference to function: klee_make_nondet
KLEE: WARNING ONCE: Alignment of memory from call "malloc" is not modelled. Using alignment of 8.
No error found.
NOTE: In the future, the result is going to be reported in SV-COMP format only with --report=sv-comp switch
RESULT: true
INFO: Total time elapsed: 0.3934328556060791

My machine:

$ cc symbiotic-mallocs.c && ./a.out
a.out: symbiotic-mallocs.c:17: main: Assertion `b != c' failed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions