@@ -381,15 +381,20 @@ static void dump_object_info(struct kmemleak_object *object)
381
381
static struct kmemleak_object * lookup_object (unsigned long ptr , int alias )
382
382
{
383
383
struct rb_node * rb = object_tree_root .rb_node ;
384
+ unsigned long untagged_ptr = (unsigned long )kasan_reset_tag ((void * )ptr );
384
385
385
386
while (rb ) {
386
- struct kmemleak_object * object =
387
- rb_entry (rb , struct kmemleak_object , rb_node );
388
- if (ptr < object -> pointer )
387
+ struct kmemleak_object * object ;
388
+ unsigned long untagged_objp ;
389
+
390
+ object = rb_entry (rb , struct kmemleak_object , rb_node );
391
+ untagged_objp = (unsigned long )kasan_reset_tag ((void * )object -> pointer );
392
+
393
+ if (untagged_ptr < untagged_objp )
389
394
rb = object -> rb_node .rb_left ;
390
- else if (object -> pointer + object -> size <= ptr )
395
+ else if (untagged_objp + object -> size <= untagged_ptr )
391
396
rb = object -> rb_node .rb_right ;
392
- else if (object -> pointer == ptr || alias )
397
+ else if (untagged_objp == untagged_ptr || alias )
393
398
return object ;
394
399
else {
395
400
kmemleak_warn ("Found object by alias at 0x%08lx\n" ,
@@ -576,6 +581,7 @@ static struct kmemleak_object *create_object(unsigned long ptr, size_t size,
576
581
struct kmemleak_object * object , * parent ;
577
582
struct rb_node * * link , * rb_parent ;
578
583
unsigned long untagged_ptr ;
584
+ unsigned long untagged_objp ;
579
585
580
586
object = mem_pool_alloc (gfp );
581
587
if (!object ) {
@@ -629,9 +635,10 @@ static struct kmemleak_object *create_object(unsigned long ptr, size_t size,
629
635
while (* link ) {
630
636
rb_parent = * link ;
631
637
parent = rb_entry (rb_parent , struct kmemleak_object , rb_node );
632
- if (ptr + size <= parent -> pointer )
638
+ untagged_objp = (unsigned long )kasan_reset_tag ((void * )parent -> pointer );
639
+ if (untagged_ptr + size <= untagged_objp )
633
640
link = & parent -> rb_node .rb_left ;
634
- else if (parent -> pointer + parent -> size <= ptr )
641
+ else if (untagged_objp + parent -> size <= untagged_ptr )
635
642
link = & parent -> rb_node .rb_right ;
636
643
else {
637
644
kmemleak_stop ("Cannot insert 0x%lx into the object search tree (overlaps existing)\n" ,
0 commit comments