| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
reason about the expression.
This essentially keeps more history about how symbolic values were
constructed. As an optimization, previous to this commit, we only kept
the history if one of the symbols was tainted, but it's valuable keep
the history around for other purposes as well: it allows us to avoid
constructing conjured symbols.
Specifically, we need to identify the value of ptr as
ElementRegion (result of pointer arithmetic) in the following code.
However, before this commit '(2-x)' evaluated to Unknown value, and as
the result, 'p + (2-x)' evaluated to Unknown value as well.
int *p = malloc(sizeof(int));
ptr = p + (2-x);
This change brings 2% slowdown on sqlite. Fixes radar://11329382.
llvm-svn: 155944
|
| |
|
|
|
|
| |
default values. Fixes <rdar://problem/11269741>.
llvm-svn: 155615
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Specifically, we use the last store of the leaked symbol in the leak diagnostic.
(No support for struct fields since the malloc checker doesn't track those
yet.)
+ Infrastructure to track the regions used in store evaluations.
This approach is more precise than iterating the store to
obtain the region bound to the symbol, which is used in RetainCount
checker. The region corresponds to what is uttered in the code in the
last store and we do not rely on the store implementation to support
this functionality.
llvm-svn: 153212
|
| |
|
|
|
|
| |
memory doesn't alias symbolic memory. This is a heuristic/hack, but works well in practice. Fixes <rdar://problem/10978247>.
llvm-svn: 152065
|
| |
|
|
|
|
|
|
|
|
|
|
| |
funopen, setvbuf.
Teach the checker and the engine about these APIs to resolve malloc
false positives. As I am adding more of these APIs, it is clear that all
this should be factored out into a separate callback (for example,
region escapes). Malloc, KeyChainAPI and RetainRelease checkers could
all use it.
llvm-svn: 151737
|
| |
|
|
|
|
|
|
|
| |
When we find two leak reports with the same allocation site, report only
one of them.
Provide a helper method to BugReporter to facilitate this.
llvm-svn: 151287
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Make this call an exception in ExprEngine::invalidateArguments:
'int pthread_setspecific(ptheread_key k, const void *)' stores
a value into thread local storage. The value can later be retrieved
with 'void *ptheread_getspecific(pthread_key)'. So even thought the
parameter is 'const void *', the region escapes through the
call.
(Here we just blacklist the call in the ExprEngine's default
logic. Another option would be to add a checker which evaluates
the call and triggers the call to invalidate regions.)
Teach the Malloc Checker, which treats all system calls as safe about
the API.
llvm-svn: 151220
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- We should not evaluate strdup in the Malloc Checker, it's the job of
CString checker, so just update the RefState to reflect allocated
memory.
- Refactor to reduce LOC: remove some wrapper auxiliary functions, make
all functions return the state and add the transition in one place
(instead of in each auxiliary function).
llvm-svn: 151188
|
| |
|
|
| |
llvm-svn: 151124
|
| |
|
|
|
|
|
| |
, when we return a symbol reachable to the malloced one via pointer
arithmetic.
llvm-svn: 151121
|
| |
|
|
|
|
|
|
|
|
|
|
| |
checks:
- unix.Malloc - Checks for memory leaks, double free, use-after-free.
- unix.cstring.NullArg - Checks for null pointers passed as arguments to
CString functions + evaluates CString functions.
- unix.cstring.BadSizeArg - Checks for common anti-patterns in
strncat size argument.
llvm-svn: 150988
|
| |
|
|
| |
llvm-svn: 150847
|
| |
|
|
|
|
|
|
|
|
|
|
| |
it aware of CString APIs that return the input parameter.
Malloc Checker needs to know how the 'strcpy' function is
evaluated. Introduce the dependency on CStringChecker for that.
CStringChecker knows all about these APIs.
Addresses radar://10864450
llvm-svn: 150846
|
| |
|
|
| |
llvm-svn: 150734
|
| |
|
|
|
|
|
| |
- Rename the category "Logic Error" -> "Memory Error".
- Shorten all the messages.
llvm-svn: 150733
|
| |
|
|
|
|
|
|
| |
We are not properly handling the memory regions that escape into struct
fields, which led to a bunch of false positives. Be conservative here
and give up when a pointer escapes into a struct.
llvm-svn: 150658
|
| |
|
|
| |
llvm-svn: 150534
|
| |
|
|
|
|
| |
the passed in pointer on failure.
llvm-svn: 150533
|
| |
|
|
|
|
| |
hardening.
llvm-svn: 150532
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
in realloc map.
If there is no dependency, the reallocated ptr will get garbage
collected before we know that realloc failed, which would lead us to
missing a memory leak warning.
Also added new test cases, which we can handle now.
Plus minor cleanups.
llvm-svn: 150446
|
| |
|
|
|
|
| |
case when size is 0.
llvm-svn: 150412
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1) Support the case when realloc fails to reduce False Positives. (We
essentially need to restore the state of the pointer being reallocated.)
2) Realloc behaves differently under special conditions (from pointer is
null, size is 0). When detecting these cases, we should consider
under-constrained states (size might or might not be 0). The
old version handled this in a very hacky way. The code did not
differentiate between definite and possible (no consideration for
under-constrained states). Further, after processing each special case,
the realloc processing function did not return but chained to the next
special case processing. So you could end up in an execution in which
you first see the states in which size is 0 and realloc ~ free(),
followed by the states corresponding to size is not 0 followed by the
evaluation of the regular realloc behavior.
llvm-svn: 150402
|
| |
|
|
|
|
|
| |
a pointer cannot escape through calls to system functions. Also, stop
after reporting the first use-after-free.
llvm-svn: 150315
|
| |
|
|
|
|
|
|
|
| |
memory.
(As per one test case, the existing checker thought that this could
cause a lot of false positives - not sure if that's valid, to be
verified.)
llvm-svn: 150313
|
| |
|
|
|
|
|
| |
Resolves a common false positive, where we were reporting a leak inside
asserts
llvm-svn: 150312
|
| |
|
|
|
|
| |
We use the same logic here as the RetainRelease checker.
llvm-svn: 150311
|
| |
|
|
|
|
| |
the checker over postgres and sqlite.
llvm-svn: 150216
|
| |
|
|
|
|
| |
(use of return instead of continue), wording.
llvm-svn: 150215
|
| |
|
|
|
|
|
| |
Very simple so far - we just highlight every allocation and release
site.
llvm-svn: 150156
|
| |
|
|
| |
llvm-svn: 150155
|
| |
|
|
|
|
|
|
|
|
|
|
| |
which allows values to escape through unknown calls.
Assumes all calls but the malloc family are unknown.
Also, catch a use-after-free when a pointer is passed to a
function after a call to free (previously, you had to explicitly
dereference the pointer value).
llvm-svn: 150112
|
| |
|
|
|
|
|
|
| |
free() is returned by realloc(). Most code expect NULL.
And we only need to transfer one final ProgramState.
llvm-svn: 138937
|
| |
|
|
|
|
| |
be the common root package.
llvm-svn: 136835
|
| |
|
|
|
|
|
|
| |
a size of 0 is equivalent to free(). The memory region should be marked as free and not used again.
Unit tests f2_realloc_0(), f6_realloc(), and f7_realloc() contributed by Marshall Clow <mclow.lists@gmail.com>. Thanks!
llvm-svn: 130303
|
| |
|
|
| |
llvm-svn: 128187
|
| |
|
|
|
|
| |
misnomer award.
llvm-svn: 126676
|
| |
|
|
| |
llvm-svn: 126617
|
| |
|
|
| |
llvm-svn: 126607
|
| |
|
|
| |
llvm-svn: 126606
|
| |
|
|
|
|
| |
have any checkers associated with it anymore.
llvm-svn: 126440
|
| |
|
|
| |
llvm-svn: 126438
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
checks. These are:
CStringChecker
ChrootChecker
MallocChecker
PthreadLockChecker
StreamChecker
UnreachableCodeChecker
MallocChecker creates implicit dependencies between checkers and needs to be handled differently.
llvm-svn: 125598
|
| |
|
|
|
|
| |
for malloc/free checking. Patch by Andrew McGregor!
llvm-svn: 109939
|
| |
|
|
|
|
|
|
|
|
| |
analyzer checks.
- Created a new class to do post-analysis
- Updated several test cases with unreachable code to expect a warning
- Added some general tests
llvm-svn: 109286
|
| |
|
|
|
|
| |
pointers) causes a divide-by-zero error. Simple fix: check if the pointee type size is 0 and bail out early if it is.
llvm-svn: 106401
|
| |
|
|
|
|
| |
modification.
llvm-svn: 105264
|
| |
|
|
|
|
|
| |
whether the size of the symbolic region is a multiple of the size of T.
Fixes PR6123 and PR7217.
llvm-svn: 104584
|
| |
|
|
| |
llvm-svn: 98136
|
| |
|
|
| |
llvm-svn: 96154
|
| |
|
|
| |
llvm-svn: 95348
|