HomePhabricator

[DFSan] Change shadow and origin memory layouts to match MSan.

Authored by browneee on Jun 24 2021, 10:16 PM.

Description

[DFSan] Change shadow and origin memory layouts to match MSan.

Previously on x86_64:

+--------------------+ 0x800000000000 (top of memory)
| application memory |
+--------------------+ 0x700000008000 (kAppAddr)
|                    |
|       unused       |
|                    |
+--------------------+ 0x300000000000 (kUnusedAddr)
|       origin       |
+--------------------+ 0x200000008000 (kOriginAddr)
|       unused       |
+--------------------+ 0x200000000000
|   shadow memory    |
+--------------------+ 0x100000008000 (kShadowAddr)
|       unused       |
+--------------------+ 0x000000010000
| reserved by kernel |
+--------------------+ 0x000000000000

MEM_TO_SHADOW(mem) = mem & ~0x600000000000
SHADOW_TO_ORIGIN(shadow) = kOriginAddr - kShadowAddr + shadow

Now for x86_64:

+--------------------+ 0x800000000000 (top of memory)
|    application 3   |
+--------------------+ 0x700000000000
|      invalid       |
+--------------------+ 0x610000000000
|      origin 1      |
+--------------------+ 0x600000000000
|    application 2   |
+--------------------+ 0x510000000000
|      shadow 1      |
+--------------------+ 0x500000000000
|      invalid       |
+--------------------+ 0x400000000000
|      origin 3      |
+--------------------+ 0x300000000000
|      shadow 3      |
+--------------------+ 0x200000000000
|      origin 2      |
+--------------------+ 0x110000000000
|      invalid       |
+--------------------+ 0x100000000000
|      shadow 2      |
+--------------------+ 0x010000000000
|    application 1   |
+--------------------+ 0x000000000000

MEM_TO_SHADOW(mem) = mem ^ 0x500000000000
SHADOW_TO_ORIGIN(shadow) = shadow + 0x100000000000

Reviewed By: stephan.yichao.zhao, gbalats

Differential Revision: https://reviews.llvm.org/D104896