Lines Matching refs:info

243 static void print_error_description(struct kasan_report_info *info)
245 pr_err("BUG: KASAN: %s in %pS\n", info->bug_type, (void *)info->ip);
247 if (info->type != KASAN_REPORT_ACCESS) {
249 info->access_addr, current->comm, task_pid_nr(current));
253 if (info->access_size)
255 info->is_write ? "Write" : "Read", info->access_size,
256 info->access_addr, current->comm, task_pid_nr(current));
259 info->is_write ? "Write" : "Read",
260 info->access_addr, current->comm, task_pid_nr(current));
279 static void describe_object_addr(const void *addr, struct kasan_report_info *info)
282 unsigned long object_addr = (unsigned long)info->object;
288 info->object, info->cache->name, info->cache->object_size);
293 } else if (access_addr >= object_addr + info->alloc_size) {
295 rel_bytes = access_addr - (object_addr + info->alloc_size);
309 if (strcmp(info->bug_type, "slab-out-of-bounds") == 0)
311 else if (strcmp(info->bug_type, "slab-use-after-free") == 0)
317 rel_bytes, rel_type, region_state, info->alloc_size,
318 (void *)object_addr, (void *)(object_addr + info->alloc_size));
321 static void describe_object_stacks(struct kasan_report_info *info)
323 if (info->alloc_track.stack) {
324 print_track(&info->alloc_track, "Allocated");
328 if (info->free_track.stack) {
329 print_track(&info->free_track, "Freed");
333 kasan_print_aux_stacks(info->cache, info->object);
336 static void describe_object(const void *addr, struct kasan_report_info *info)
339 describe_object_stacks(info);
340 describe_object_addr(addr, info);
360 struct kasan_report_info *info)
367 if (info->cache && info->object) {
368 describe_object(addr, info);
464 static void print_report(struct kasan_report_info *info)
466 void *addr = kasan_reset_tag((void *)info->access_addr);
467 u8 tag = get_tag((void *)info->access_addr);
469 print_error_description(info);
471 kasan_print_tags(tag, info->first_bad_addr);
475 print_address_description(addr, tag, info);
476 print_memory_metadata(info->first_bad_addr);
482 static void complete_report_info(struct kasan_report_info *info)
484 void *addr = kasan_reset_tag((void *)info->access_addr);
487 if (info->type == KASAN_REPORT_ACCESS)
488 info->first_bad_addr = kasan_find_first_bad_addr(
489 (void *)info->access_addr, info->access_size);
491 info->first_bad_addr = addr;
495 info->cache = slab->slab_cache;
496 info->object = nearest_obj(info->cache, slab, addr);
499 info->alloc_size = kasan_get_alloc_size(info->object, info->cache);
501 if (!info->alloc_size)
502 info->alloc_size = info->cache->object_size;
504 info->cache = info->object = NULL;
506 switch (info->type) {
508 info->bug_type = "invalid-free";
511 info->bug_type = "double-free";
518 /* Fill in mode-specific report info fields. */
519 kasan_complete_mode_report_info(info);
525 struct kasan_report_info info;
541 memset(&info, 0, sizeof(info));
542 info.type = type;
543 info.access_addr = ptr;
544 info.access_size = 0;
545 info.is_write = false;
546 info.ip = ip;
548 complete_report_info(&info);
550 print_report(&info);
570 struct kasan_report_info info;
579 memset(&info, 0, sizeof(info));
580 info.type = KASAN_REPORT_ACCESS;
581 info.access_addr = addr;
582 info.access_size = size;
583 info.is_write = is_write;
584 info.ip = ip;
586 complete_report_info(&info);
588 print_report(&info);