| OLD | NEW |
| 1 //===- subzero/runtime/szrt_asan.c - AddressSanitizer Runtime -----*- C -*-===// | 1 //===- subzero/runtime/szrt_asan.c - AddressSanitizer Runtime -----*- C -*-===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 /// | 9 /// |
| 10 /// \file | 10 /// \file |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 else | 72 else |
| 73 printf("protected bad region\n"); | 73 printf("protected bad region\n"); |
| 74 } | 74 } |
| 75 | 75 |
| 76 void __asan_check(char *ptr, int size) { | 76 void __asan_check(char *ptr, int size) { |
| 77 printf("check %d bytes at %p\n", size, ptr); | 77 printf("check %d bytes at %p\n", size, ptr); |
| 78 char *end = ptr + size; | 78 char *end = ptr + size; |
| 79 for (; ptr < end; ++ptr) { | 79 for (; ptr < end; ++ptr) { |
| 80 char shadow = *(char *)MEM2SHADOW(ptr); | 80 char shadow = *(char *)MEM2SHADOW(ptr); |
| 81 printf("checking %p with shadow %d\n", ptr, shadow); | 81 printf("checking %p with shadow %d\n", ptr, shadow); |
| 82 assert(shadow == 0 || (shadow > 0 && SHADOW_OFFSET(ptr) <= shadow)); | 82 if (shadow != 0 && (shadow < 0 || SHADOW_OFFSET(ptr) > shadow)) { |
| 83 fprintf(stderr, "Illegal access of %d bytes at %p\n", size, ptr); |
| 84 abort(); |
| 85 } |
| 83 } | 86 } |
| 84 } | 87 } |
| 85 | 88 |
| 86 void *__asan_malloc(size_t size) { | 89 void *__asan_malloc(size_t size) { |
| 87 printf("malloc() called with size %d\n", size); | 90 printf("malloc() called with size %d\n", size); |
| 88 size_t padding = | 91 size_t padding = |
| 89 (IS_SHADOW_ALIGNED(size)) ? 0 : SHADOW_SCALE - SHADOW_OFFSET(size); | 92 (IS_SHADOW_ALIGNED(size)) ? 0 : SHADOW_SCALE - SHADOW_OFFSET(size); |
| 90 size_t rz_left_size = RZ_SIZE; | 93 size_t rz_left_size = RZ_SIZE; |
| 91 size_t rz_right_size = RZ_SIZE + padding; | 94 size_t rz_right_size = RZ_SIZE + padding; |
| 92 void *rz_left; | 95 void *rz_left; |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 assert(size < 2 * RZ_SIZE); | 142 assert(size < 2 * RZ_SIZE); |
| 140 printf("unpoison %d bytes at %p: %p - %p\n", size, ptr, MEM2SHADOW(ptr), | 143 printf("unpoison %d bytes at %p: %p - %p\n", size, ptr, MEM2SHADOW(ptr), |
| 141 MEM2SHADOW(end)); | 144 MEM2SHADOW(end)); |
| 142 *(char *)MEM2SHADOW(ptr) = 0; | 145 *(char *)MEM2SHADOW(ptr) = 0; |
| 143 ptr += SHADOW_OFFSET(size); | 146 ptr += SHADOW_OFFSET(size); |
| 144 assert(IS_SHADOW_ALIGNED(ptr)); | 147 assert(IS_SHADOW_ALIGNED(ptr)); |
| 145 for (; ptr != end; ptr += SHADOW_SCALE) { | 148 for (; ptr != end; ptr += SHADOW_SCALE) { |
| 146 *(char *)MEM2SHADOW(ptr) = 0; | 149 *(char *)MEM2SHADOW(ptr) = 0; |
| 147 } | 150 } |
| 148 } | 151 } |
| OLD | NEW |