]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cxl/edac: Fix potential memory leak issues
authorLi Ming <ming.li@zohomail.com>
Fri, 13 Jun 2025 01:16:48 +0000 (09:16 +0800)
committerDave Jiang <dave.jiang@intel.com>
Fri, 13 Jun 2025 15:45:30 +0000 (08:45 -0700)
In cxl_store_rec_gen_media() and cxl_store_rec_dram(), use kmemdup() to
duplicate a cxl gen_media/dram event to store the event in a xarray by
xa_store(). The cxl gen_media/dram event allocated by kmemdup() should
be freed in the case that the xa_store() fails.

Fixes: 0b5ccb0de1e2 ("cxl/edac: Support for finding memory operation attributes from the current boot")
Signed-off-by: Li Ming <ming.li@zohomail.com>
Tested-by: Shiju Jose <shiju.jose@huawei.com>
Reviewed-by: Shiju Jose <shiju.jose@huawei.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Link: https://patch.msgid.link/20250613011648.102840-1-ming.li@zohomail.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/edac.c

index 0ef245d0bd9fd8d6269fde9820696ccadb150e90..d725ee95419994498ea4751063ac4db7651f6854 100644 (file)
@@ -1103,8 +1103,10 @@ int cxl_store_rec_gen_media(struct cxl_memdev *cxlmd, union cxl_event *evt)
        old_rec = xa_store(&array_rec->rec_gen_media,
                           le64_to_cpu(rec->media_hdr.phys_addr), rec,
                           GFP_KERNEL);
-       if (xa_is_err(old_rec))
+       if (xa_is_err(old_rec)) {
+               kfree(rec);
                return xa_err(old_rec);
+       }
 
        kfree(old_rec);
 
@@ -1131,8 +1133,10 @@ int cxl_store_rec_dram(struct cxl_memdev *cxlmd, union cxl_event *evt)
        old_rec = xa_store(&array_rec->rec_dram,
                           le64_to_cpu(rec->media_hdr.phys_addr), rec,
                           GFP_KERNEL);
-       if (xa_is_err(old_rec))
+       if (xa_is_err(old_rec)) {
+               kfree(rec);
                return xa_err(old_rec);
+       }
 
        kfree(old_rec);