On Thu, 25 Nov 2021 17:13:36 +0100 Andrey Konovalov <andreyknvl@xxxxxxxxx> wrote: > > > kmemleak_object *object) > > > static struct kmemleak_object *lookup_object(unsigned long ptr, int > > > alias) > > > { > > > struct rb_node *rb = object_tree_root.rb_node; > > > + unsigned long untagged_ptr = (unsigned > > > long)kasan_reset_tag((void *)ptr); > > > > > > while (rb) { > > > struct kmemleak_object *object = > > > rb_entry(rb, struct kmemleak_object, rb_node); > > > - if (ptr < object->pointer) > > > + unsigned long untagged_objp; > > > + > > > + untagged_objp = (unsigned long)kasan_reset_tag((void > > > *)object->pointer); > > The two lines above can be squashed together. That would make a too-long line even longer. In fact I think it's better to go the other way: --- a/mm/kmemleak.c~kmemleak-fix-kmemleak-false-positive-report-with-hw-tag-based-kasan-enable-fix +++ a/mm/kmemleak.c @@ -384,10 +384,10 @@ static struct kmemleak_object *lookup_ob unsigned long untagged_ptr = (unsigned long)kasan_reset_tag((void *)ptr); while (rb) { - struct kmemleak_object *object = - rb_entry(rb, struct kmemleak_object, rb_node); + struct kmemleak_object *object; unsigned long untagged_objp; + object = rb_entry(rb, struct kmemleak_object, rb_node); untagged_objp = (unsigned long)kasan_reset_tag((void *)object->pointer); if (untagged_ptr < untagged_objp) _