• Zhang Xiaoxu's avatar
    orangefs: Fix kmemleak in orangefs_sysfs_init() · 1f2c0e8a
    Zhang Xiaoxu authored
    When insert and remove the orangefs module, there are kobjects memory
    leaked as below:
    
    unreferenced object 0xffff88810f95af00 (size 64):
      comm "insmod", pid 783, jiffies 4294813439 (age 65.512s)
      hex dump (first 32 bytes):
        a0 83 af 01 81 88 ff ff 08 af 95 0f 81 88 ff ff  ................
        08 af 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000005a6e4dfe>] orangefs_sysfs_init+0x42/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    unreferenced object 0xffff88810f95ae80 (size 64):
      comm "insmod", pid 783, jiffies 4294813439 (age 65.512s)
      hex dump (first 32 bytes):
        c8 90 0f 02 81 88 ff ff 88 ae 95 0f 81 88 ff ff  ................
        88 ae 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000001a4841fa>] orangefs_sysfs_init+0xc7/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    unreferenced object 0xffff88810f95ae00 (size 64):
      comm "insmod", pid 783, jiffies 4294813440 (age 65.511s)
      hex dump (first 32 bytes):
        60 87 a1 00 81 88 ff ff 08 ae 95 0f 81 88 ff ff  `...............
        08 ae 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000005915e797>] orangefs_sysfs_init+0x12b/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    unreferenced object 0xffff88810f95ad80 (size 64):
      comm "insmod", pid 783, jiffies 4294813440 (age 65.511s)
      hex dump (first 32 bytes):
        78 90 0f 02 81 88 ff ff 88 ad 95 0f 81 88 ff ff  x...............
        88 ad 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000007a14eb35>] orangefs_sysfs_init+0x1ac/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    unreferenced object 0xffff88810f95ac00 (size 64):
      comm "insmod", pid 783, jiffies 4294813440 (age 65.531s)
      hex dump (first 32 bytes):
        e0 ff 67 02 81 88 ff ff 08 ac 95 0f 81 88 ff ff  ..g.............
        08 ac 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000001f38adcb>] orangefs_sysfs_init+0x291/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    unreferenced object 0xffff88810f95ab80 (size 64):
      comm "insmod", pid 783, jiffies 4294813441 (age 65.530s)
      hex dump (first 32 bytes):
        50 bf 2f 02 81 88 ff ff 88 ab 95 0f 81 88 ff ff  P./.............
        88 ab 95 0f 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<0000000031ab7788>] kmalloc_trace+0x27/0xa0
        [<000000009cc7d95b>] orangefs_sysfs_init+0x2f5/0x3a0
        [<00000000722645ca>] 0xffffffffa02780fe
        [<000000004232d9f7>] do_one_initcall+0x87/0x2a0
        [<0000000054f22384>] do_init_module+0xdf/0x320
        [<000000003263bdea>] load_module+0x2f98/0x3330
        [<0000000052cd4153>] __do_sys_finit_module+0x113/0x1b0
        [<00000000250ae02b>] do_syscall_64+0x35/0x80
        [<00000000f11c03c7>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    Should add release function for each kobject_type to free the memory.
    Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
    1f2c0e8a
orangefs-sysfs.c 34.4 KB