Patch "orangefs: Fix kmemleak in orangefs_sysfs_init()" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    orangefs: Fix kmemleak in orangefs_sysfs_init()

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     orangefs-fix-kmemleak-in-orangefs_sysfs_init.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6a7c27e7d2fe9238103433632c70d811b6b33d08
Author: Zhang Xiaoxu <zhangxiaoxu5@xxxxxxxxxx>
Date:   Tue Oct 18 12:40:06 2022 +0800

    orangefs: Fix kmemleak in orangefs_sysfs_init()
    
    [ Upstream commit 1f2c0e8a587bcafad85019a2d80f158d8d41a868 ]
    
    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: Zhang Xiaoxu <zhangxiaoxu5@xxxxxxxxxx>
    Signed-off-by: Mike Marshall <hubcap@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/fs/orangefs/orangefs-sysfs.c b/fs/orangefs/orangefs-sysfs.c
index de80b62553bb..be4ba03a01a0 100644
--- a/fs/orangefs/orangefs-sysfs.c
+++ b/fs/orangefs/orangefs-sysfs.c
@@ -896,9 +896,18 @@ static struct attribute *orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(orangefs_default);
 
+static struct kobject *orangefs_obj;
+
+static void orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(orangefs_obj);
+	orangefs_obj = NULL;
+}
+
 static struct kobj_type orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = orangefs_default_groups,
+	.release = orangefs_obj_release,
 };
 
 static struct orangefs_attribute acache_hard_limit_attribute =
@@ -934,9 +943,18 @@ static struct attribute *acache_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(acache_orangefs_default);
 
+static struct kobject *acache_orangefs_obj;
+
+static void acache_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(acache_orangefs_obj);
+	acache_orangefs_obj = NULL;
+}
+
 static struct kobj_type acache_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = acache_orangefs_default_groups,
+	.release = acache_orangefs_obj_release,
 };
 
 static struct orangefs_attribute capcache_hard_limit_attribute =
@@ -972,9 +990,18 @@ static struct attribute *capcache_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(capcache_orangefs_default);
 
+static struct kobject *capcache_orangefs_obj;
+
+static void capcache_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(capcache_orangefs_obj);
+	capcache_orangefs_obj = NULL;
+}
+
 static struct kobj_type capcache_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = capcache_orangefs_default_groups,
+	.release = capcache_orangefs_obj_release,
 };
 
 static struct orangefs_attribute ccache_hard_limit_attribute =
@@ -1010,9 +1037,18 @@ static struct attribute *ccache_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(ccache_orangefs_default);
 
+static struct kobject *ccache_orangefs_obj;
+
+static void ccache_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(ccache_orangefs_obj);
+	ccache_orangefs_obj = NULL;
+}
+
 static struct kobj_type ccache_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = ccache_orangefs_default_groups,
+	.release = ccache_orangefs_obj_release,
 };
 
 static struct orangefs_attribute ncache_hard_limit_attribute =
@@ -1048,9 +1084,18 @@ static struct attribute *ncache_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(ncache_orangefs_default);
 
+static struct kobject *ncache_orangefs_obj;
+
+static void ncache_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(ncache_orangefs_obj);
+	ncache_orangefs_obj = NULL;
+}
+
 static struct kobj_type ncache_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = ncache_orangefs_default_groups,
+	.release = ncache_orangefs_obj_release,
 };
 
 static struct orangefs_attribute pc_acache_attribute =
@@ -1079,9 +1124,18 @@ static struct attribute *pc_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(pc_orangefs_default);
 
+static struct kobject *pc_orangefs_obj;
+
+static void pc_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(pc_orangefs_obj);
+	pc_orangefs_obj = NULL;
+}
+
 static struct kobj_type pc_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = pc_orangefs_default_groups,
+	.release = pc_orangefs_obj_release,
 };
 
 static struct orangefs_attribute stats_reads_attribute =
@@ -1103,19 +1157,20 @@ static struct attribute *stats_orangefs_default_attrs[] = {
 };
 ATTRIBUTE_GROUPS(stats_orangefs_default);
 
+static struct kobject *stats_orangefs_obj;
+
+static void stats_orangefs_obj_release(struct kobject *kobj)
+{
+	kfree(stats_orangefs_obj);
+	stats_orangefs_obj = NULL;
+}
+
 static struct kobj_type stats_orangefs_ktype = {
 	.sysfs_ops = &orangefs_sysfs_ops,
 	.default_groups = stats_orangefs_default_groups,
+	.release = stats_orangefs_obj_release,
 };
 
-static struct kobject *orangefs_obj;
-static struct kobject *acache_orangefs_obj;
-static struct kobject *capcache_orangefs_obj;
-static struct kobject *ccache_orangefs_obj;
-static struct kobject *ncache_orangefs_obj;
-static struct kobject *pc_orangefs_obj;
-static struct kobject *stats_orangefs_obj;
-
 int orangefs_sysfs_init(void)
 {
 	int rc = -EINVAL;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux