• Jinjie Ruan's avatar
    fpga: Fix memory leak for fpga_region_test_class_find() · 28926daf
    Jinjie Ruan authored
    fpga_region_class_find() in fpga_region_test_class_find() will call
    get_device() if the data is matched, which will increment refcount for
    dev->kobj, so it should call put_device() to decrement refcount for
    dev->kobj to free the region, because fpga_region_unregister() will call
    fpga_region_dev_release() only when the refcount for dev->kobj is zero
    but fpga_region_test_init() call device_register() in
    fpga_region_register_full(), which also increment refcount.
    
    So call put_device() after calling fpga_region_class_find() in
    fpga_region_test_class_find(). After applying this patch, the following
    memory leak is never detected.
    
    unreferenced object 0xffff88810c8ef000 (size 1024):
      comm "kunit_try_catch", pid 1875, jiffies 4294715298 (age 836.836s)
      hex dump (first 32 bytes):
        b8 d1 fb 05 81 88 ff ff 08 f0 8e 0c 81 88 ff ff  ................
        08 f0 8e 0c 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff817ebad7>] km...
    28926daf
fpga-region-test.c 5.48 KB