<div dir="ltr"><div>+  if (size == 0 && common_flags()->detect_malloc_zero)</div><div>+    ReportIfMallocZero("memalign", stack);</div><div><br></div><div>I would prefer to pass 'size' as parameter and do both checks inside ReportIfMallocZero. </div>
<div>You will also need to add tests with this flag on, off, and unset<br></div><div> (similar to test/asan/TestCases/memcmp_strict_test.cc)</div><div><br></div><div>I may have more comments, so please send the change using <a href="http://llvm.org/docs/Phabricator.html">llvm.org/docs/Phabricator.html</a><br>
</div><div><br></div><div>Thanks! </div><div><br></div><div>--kcc </div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Mar 16, 2014 at 12:29 AM, Dominique Pellé <span dir="ltr"><<a href="mailto:dominique.pelle@gmail.com" target="_blank">dominique.pelle@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi<br>
<br>
Attached is a patch to detect call of malloc with size 0 as an<br>
error with ASAN. Calling malloc(0) is admittedly not necessarily<br>
incorrect, so the check is disabled by default and can be enabled<br>
by adding 'detect_malloc_zero=1' to the environment variable<br>
ASAN_OPTIONS. Behavior of malloc(0) depends on platforms:<br>
it returns an address on most platforms but returns NULL at<br>
least on AIX. So calling malloc(0) is a source of portability bugs.<br>
<br>
This is my fist clang patch and I'm not sure whether the patch is<br>
the best way to do that. Perhaps it would be better if UBSAN<br>
detected it rather than ASAN.<br>
<br>
Here is an example to illustrate:<br>
<br>
===<br>
$ cat test-malloc0.cpp<br>
<br>
#include <cstdlib><br>
#include <cstdio><br>
<br>
int main(int argc, char *argv[])<br>
{<br>
  char *c = (char *)malloc(atoi(argv[1]));<br>
  if (c == NULL) {<br>
    fprintf(stderr, "Failed to allocate\n");<br>
    return -1;<br>
  }<br>
  free(c);<br>
  return 0;<br>
}<br>
<br>
<br>
$ clang++ --fsanitize=address<br>
$ ./a.out 0<br>
(no error reported by default, option needs to be enabled in ASAN_OPTIONS)<br>
<br>
<br>
$ export ASAN_OPTIONS=detect_malloc_zero=1<br>
$ ./a.out 0<br>
=================================================================<br>
==7999==ERROR: malloc with 0 size is platform dependent<br>
    #0 0x46d52b in malloc<br>
/home/pel/sb/llvm/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:75<br>
    #1 0x488314 in main (/home/pel/sb/a.out+0x488314)<br>
    #2 0x7ffd07136de4 in __libc_start_main<br>
/build/buildd/eglibc-2.17/csu/libc-start.c:260<br>
<br>
==7999==ABORTING<br>
<br>
Regards<br>
<span class="HOEnZb"><font color="#888888">Dominique<br>
</font></span><br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div>