This is my code that is generating a false violation when compiled with mudflap
and the following options
export MUDFLAP_OPTIONS='-mode-check -viol-segv -backtrace=4 -verbose-violations
-check-initialization'

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <dirent.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>


int main()
{
  struct dirent **namelist;
  struct stat statinfo;
  int n=0, i;

  n=scandir("/d/ttt/",&namelist,NULL,alphasort);
  if(n<0)
  {
    printf("ERROR scandir: %s\n", strerror(errno));
    return 0;
  }
  else
  {
    printf("n %d\n", n);
  }


  while(n--)
  {
    printf("namelist[%d]->d_name '%s'\n", n, namelist[n]->d_name);
    memset(&statinfo, 0, sizeof(statinfo));
    stat(namelist[n]->d_name,&statinfo);
    free(namelist[n]);
  }
  free(namelist);

  return 0;
}


And here is the false violation reported

*******
mudflap violation 1 (check/read): time=1206741830.906553 ptr=0x80cf0db size=10
pc=0xb7dec8ad location=`(stat path)'
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__mf_check+0x3d) [0xb7dec8ad]
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__mfwrap_stat+0x136)
[0xb7df2a46]
      ./scandir(main+0x3f2) [0x8048d8e]
Nearby object 1: checked region begins 11B into and ends 20B into
mudflap object 0x80cf110: name=`malloc region'
bounds=[0x80cf0d0,0x80cf0e7] size=24 area=heap check=1r/0w liveness=1
alloc time=1206741830.906135 pc=0xb7dec2fd
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__mf_register+0x3d)
[0xb7dec2fd]
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__wrap_malloc+0xe0)
[0xb7ded7c0]
      /lib/libc.so.6(scandir+0x8f) [0xb7d43541]
      ./scandir(main+0x97) [0x8048a33]
Nearby object 2: checked region begins 2008B after and ends 2017B after
mudflap dead object 0x80ce948: name=`malloc region'
bounds=[0x80cd8e8,0x80ce903] size=4124 area=heap check=0r/0w liveness=0
alloc time=1206741830.905913 pc=0xb7dec2fd
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__mf_register+0x3d)
[0xb7dec2fd]
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__wrap_malloc+0xe0)
[0xb7ded7c0]
      /lib/libc.so.6 [0xb7d43031]
      /lib/libc.so.6(opendir+0x5d) [0xb7d430f6]
dealloc time=1206741830.906347 pc=0xb7dec2a6
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__mf_unregister+0x36)
[0xb7dec2a6]
      /opt/miro_gcc/usr/local/lib/libmudflap.so.0(__real_free+0x80)
[0xb7ded090]
      /lib/libc.so.6(closedir+0x24) [0xb7d4314c]
      /lib/libc.so.6(scandir+0x139) [0xb7d435eb]
number of nearby objects: 2
Segmentation fault (core dumped)


-- 
           Summary: Mudflap false violation
           Product: gcc
           Version: 4.2.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: eugen at familiamorjolic dot ro


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35749

Reply via email to