> This change instruments Metaspace for ASan. Metaspace allocates memory using 
> `mmap`/`munmap` which ASan is not aware of. Fortunately ASan supports 
> applications [manually poisoning/unpoisoning 
> memory](https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning).
>  ASan is able to detect poisoned memory, similar to `use-after-free`, and 
> will raise an error similarly called `use-after-poison`. This provides and 
> extra layer of defense and confidence.
> 
> The header `sanitizers/address.h` defines macros for poisoning/unpoisoning 
> memory regions. These macros can be used regardless of build mode. When ASan 
> is not available, they are implemented using a NOOP approach which still 
> compiles the arguments but does so such that they will be stripped out by the 
> compiler due to being unreachable. This helps with maintenance.
> 
> This also has the added benefit of making 
> [LSan](https://bugs.openjdk.org/browse/JDK-8298445) more accurate and 
> deterministic, as LSan will not look for pointers to malloc memory in 
> poisoned memory regions.
> 
> IMO the benefit of doing this greatly outweighs the cost.

Justin King has updated the pull request with a new target base due to a merge 
or a rebase. The incremental webrev excludes the unrelated changes brought in 
by the merge/rebase. The pull request contains four additional commits since 
the last revision:

 - Fix typo
   
   Signed-off-by: Justin King <jck...@google.com>
 - Merge remote-tracking branch 'upstream/master' into jdk-8298908
 - Exclude more zapping when ASan is in use
   
   Signed-off-by: Justin King <jck...@google.com>
 - Instrument Metaspace for ASan
   
   Signed-off-by: Justin King <jck...@google.com>

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/11702/files
  - new: https://git.openjdk.org/jdk/pull/11702/files/956fc3f5..70907916

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=11702&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=11702&range=01-02

  Stats: 11025 lines in 712 files changed: 5540 ins; 2906 del; 2579 mod
  Patch: https://git.openjdk.org/jdk/pull/11702.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/11702/head:pull/11702

PR: https://git.openjdk.org/jdk/pull/11702

Reply via email to