https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81619

            Bug ID: 81619
           Summary: pairs of mmap/munmap do not reset asan's
                    user-poisoning flags, leading to invalid error reports
           Product: gcc
           Version: 6.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dvilleneuve at kronos dot com
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at 
gcc dot gnu.org
  Target Milestone: ---

Created attachment 41863
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41863&action=edit
small C program showing the problem on Linux

When using mmap/munmap from an application, memory returned by mmap is not seen
by the address sanitizer in a newly-initialized state: it might still be marked
with user-poisoning flags.

This is unlike using malloc/free pairs, where memory obtained from malloc,
although possibly reused after being freed, is correctly initialized.

By looking at the code for the sanitizer (gcc 6.3.0), I could figure out that
malloc/free do some reinitialization of memory flags.  I could not find such
code for mmap/munmap.

A workaround in the application is to explicitly call
ASAN_UNPOISON_MEMORY_REGION prior to invoking munmap.

Reply via email to