@@ -102,15 +102,18 @@ static FAR uintptr_t *kasan_mem_to_shadow(FAR const void *ptr, size_t size,
102
102
return NULL ;
103
103
}
104
104
105
- static void kasan_report (FAR const void * addr , size_t size , bool is_write )
105
+ static void kasan_report (FAR const void * addr , size_t size ,
106
+ bool is_write ,
107
+ FAR void * return_address )
106
108
{
107
109
static int recursion ;
108
110
109
111
if (++ recursion == 1 )
110
112
{
111
- _alert ("kasan detected a %s access error, address at %0#" PRIxPTR
112
- ", size is %zu\n" , is_write ? "write" : "read" ,
113
- (uintptr_t )addr , size );
113
+ _alert ("kasan detected a %s access error, address at %p,"
114
+ "size is %zu, return address: %p\n" ,
115
+ is_write ? "write" : "read" ,
116
+ addr , size , return_address );
114
117
PANIC ();
115
118
}
116
119
@@ -178,6 +181,16 @@ static void kasan_set_poison(FAR const void *addr, size_t size,
178
181
spin_unlock_irqrestore (& g_lock , flags );
179
182
}
180
183
184
+ static inline void kasan_check_report (FAR const void * addr , size_t size ,
185
+ bool is_write ,
186
+ FAR void * return_address )
187
+ {
188
+ if (kasan_is_poisoned (addr , size ))
189
+ {
190
+ kasan_report (addr , size , false, return_address );
191
+ }
192
+ }
193
+
181
194
/****************************************************************************
182
195
* Public Functions
183
196
****************************************************************************/
@@ -242,64 +255,58 @@ void __asan_handle_no_return(void)
242
255
243
256
void __asan_report_load_n_noabort (FAR void * addr , size_t size )
244
257
{
245
- kasan_report (addr , size , false);
258
+ kasan_report (addr , size , false, return_address ( 0 ) );
246
259
}
247
260
248
261
void __asan_report_store_n_noabort (FAR void * addr , size_t size )
249
262
{
250
- kasan_report (addr , size , true);
263
+ kasan_report (addr , size , true, return_address ( 0 ) );
251
264
}
252
265
253
266
void __asan_loadN_noabort (FAR void * addr , size_t size )
254
267
{
255
- if (kasan_is_poisoned (addr , size ))
256
- {
257
- kasan_report (addr , size , false);
258
- }
268
+ kasan_check_report (addr , size , false, return_address (0 ));
259
269
}
260
270
261
271
void __asan_storeN_noabort (FAR void * addr , size_t size )
262
272
{
263
- if (kasan_is_poisoned (addr , size ))
264
- {
265
- kasan_report (addr , size , true);
266
- }
273
+ kasan_check_report (addr , size , true, return_address (0 ));
267
274
}
268
275
269
276
void __asan_loadN (FAR void * addr , size_t size )
270
277
{
271
- __asan_loadN_noabort (addr , size );
278
+ kasan_check_report (addr , size , false, return_address ( 0 ) );
272
279
}
273
280
274
281
void __asan_storeN (FAR void * addr , size_t size )
275
282
{
276
- __asan_storeN_noabort (addr , size );
283
+ kasan_check_report (addr , size , true, return_address ( 0 ) );
277
284
}
278
285
279
286
#define DEFINE_ASAN_LOAD_STORE (size ) \
280
287
void __asan_report_load##size##_noabort(FAR void *addr) \
281
288
{ \
282
- __asan_report_load_n_noabort (addr, size); \
289
+ kasan_report (addr, size, false, return_address(0) ); \
283
290
} \
284
291
void __asan_report_store##size##_noabort(FAR void *addr) \
285
292
{ \
286
- __asan_report_store_n_noabort (addr, size); \
293
+ kasan_report (addr, size, true, return_address(0) ); \
287
294
} \
288
295
void __asan_load##size##_noabort(FAR void *addr) \
289
296
{ \
290
- __asan_loadN_noabort (addr, size); \
297
+ kasan_check_report (addr, size, false, return_address(0) ); \
291
298
} \
292
299
void __asan_store##size##_noabort(FAR void *addr) \
293
300
{ \
294
- __asan_storeN_noabort (addr, size); \
301
+ kasan_check_report (addr, size, true, return_address(0) ); \
295
302
} \
296
303
void __asan_load##size(FAR void *addr) \
297
304
{ \
298
- __asan_load##size##_noabort (addr); \
305
+ kasan_check_report (addr, size, false, return_address(0) ); \
299
306
} \
300
307
void __asan_store##size(FAR void *addr) \
301
308
{ \
302
- __asan_store##size##_noabort (addr); \
309
+ kasan_check_report (addr, size, true, return_address(0) ); \
303
310
}
304
311
305
312
DEFINE_ASAN_LOAD_STORE (1 )
0 commit comments