2626#define ASAN_RIGHT_RZ 16
2727
2828/** @brief Shadow / alignment granule (bytes) */
29- #define ASAN_GRANULE 8
29+ #define ASAN_GRANULE 16
3030
3131/** @brief Block header size (bytes); must be a multiple of ASAN_GRANULE */
3232#define ASAN_HEADER_SIZE 16
@@ -57,11 +57,6 @@ extern void *__real_sbrk_top(int incr);
5757extern struct mallinfo __real_mallinfo (void );
5858extern struct mallinfo __real__mallinfo_r (struct _reent * r );
5959
60- static inline size_t asan_round8 (size_t n )
61- {
62- return (n + ASAN_GRANULE - 1 ) & ~(size_t )(ASAN_GRANULE - 1 );
63- }
64-
6560static inline void * asan_align_ptr (void * p , size_t align )
6661{
6762 uintptr_t v = (uintptr_t )p ;
@@ -88,9 +83,7 @@ static bool asan_valid_hdr(const asan_hdr_t *hdr)
8883static void asan_poison_region (const void * addr , size_t size , void (* poison_fn )(const void * , size_t ))
8984{
9085 if (!size ) return ;
91- uintptr_t base = (uintptr_t )addr & ~(uintptr_t )(ASAN_GRANULE - 1 );
92- uintptr_t end = ((uintptr_t )addr + size + ASAN_GRANULE - 1 ) & ~(uintptr_t )(ASAN_GRANULE - 1 );
93- poison_fn ((const void * )base , end - base );
86+ poison_fn (addr , size );
9487}
9588
9689void asan_poison (void * ptr , size_t size )
@@ -132,8 +125,8 @@ void *__wrap__malloc_r(struct _reent *r, size_t n)
132125 return __real__malloc_r (r , n );
133126 }
134127
135- size_t payload_size = asan_round8 ( n ) ;
136- size_t total = ASAN_PAYLOAD_OFFSET + payload_size + ASAN_RIGHT_RZ ;
128+ size_t payload_size = n ;
129+ size_t total = ASAN_PAYLOAD_OFFSET + ASAN_GRANULE - 1 + payload_size + ASAN_RIGHT_RZ ;
137130 void * raw ;
138131 void * payload ;
139132 asan_hdr_t * hdr ;
@@ -145,7 +138,7 @@ void *__wrap__malloc_r(struct _reent *r, size_t n)
145138 return NULL ;
146139 }
147140
148- payload = ( char * )raw + ASAN_PAYLOAD_OFFSET ;
141+ payload = asan_align_ptr (( char * )raw + ASAN_PAYLOAD_OFFSET , ASAN_GRANULE ) ;
149142 hdr = asan_hdr (payload );
150143 asan_write_hdr (hdr , raw , n );
151144 emux_xasan_enable ();
@@ -171,7 +164,7 @@ void __wrap__free_r(struct _reent *r, void *p)
171164 emux_xasan_disable ();
172165 if (asan_valid_hdr (hdr )) {
173166 void * raw = hdr -> raw ;
174- size_t payload_size = asan_round8 ( hdr -> req_size ) ;
167+ size_t payload_size = hdr -> req_size ;
175168 size_t total = (char * )p + payload_size + ASAN_RIGHT_RZ - (char * )raw ;
176169 emux_xasan_poison_freed (raw , total );
177170 __real__free_r (r , raw );
@@ -221,7 +214,7 @@ void *__wrap__memalign_r(struct _reent *r, size_t align, size_t n)
221214 if (align < ASAN_GRANULE )
222215 align = ASAN_GRANULE ;
223216
224- size_t payload_size = asan_round8 ( n ) ;
217+ size_t payload_size = n ;
225218 size_t total = ASAN_PAYLOAD_OFFSET + align - 1 + payload_size + ASAN_RIGHT_RZ ;
226219 void * raw ;
227220 void * payload ;
0 commit comments