summaryrefslogtreecommitdiff
path: root/drivers/edac
diff options
context:
space:
mode:
authorRosen Penev <rosenp@gmail.com>2026-03-26 19:48:28 -0700
committerBorislav Petkov (AMD) <bp@alien8.de>2026-03-31 19:15:21 +0200
commit62ba6d66b22356a6a78fd015c37fd108710dfc32 (patch)
tree53ffb7a9b28f45cd831db13d69085e0750247c5c /drivers/edac
parent489b33708eda8b5f6a0cddb5a4964b56c12f52e2 (diff)
downloadlinux-next-62ba6d66b22356a6a78fd015c37fd108710dfc32.tar.gz
linux-next-62ba6d66b22356a6a78fd015c37fd108710dfc32.zip
EDAC/mc: Use kzalloc_flex()
Convert struct mem_ctl_info to use flex array and use the new flex array helpers to enable runtime bounds checking, including annotating the array length member with __counted_by() for extra runtime analysis when requested. Move memcpy() after the counter assignment so that it is initialized before the first reference to the flex array, as the new attribute requires. [ bp: Heavily massage commit message. ] Signed-off-by: Rosen Penev <rosenp@gmail.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Yazen Ghannam <yazen.ghannam@amd.com> Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com> Link: https://patch.msgid.link/20260327024828.7377-1-rosenp@gmail.com
Diffstat (limited to 'drivers/edac')
-rw-r--r--drivers/edac/edac_mc.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c
index 29e9828422bb..07d3f73bcd23 100644
--- a/drivers/edac/edac_mc.c
+++ b/drivers/edac/edac_mc.c
@@ -203,7 +203,6 @@ static void mci_release(struct device *dev)
kfree(mci->csrows);
}
kfree(mci->pvt_info);
- kfree(mci->layers);
kfree(mci);
}
@@ -361,13 +360,12 @@ struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
per_rank = true;
}
- mci = kzalloc_obj(struct mem_ctl_info);
+ mci = kzalloc_flex(*mci, layers, n_layers);
if (!mci)
return NULL;
- mci->layers = kzalloc_objs(struct edac_mc_layer, n_layers);
- if (!mci->layers)
- goto error;
+ mci->n_layers = n_layers;
+ memcpy(mci->layers, layers, sizeof(*layer) * n_layers);
mci->pvt_info = kzalloc(sz_pvt, GFP_KERNEL);
if (!mci->pvt_info)
@@ -379,8 +377,6 @@ struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
/* setup index and various internal pointers */
mci->mc_idx = mc_num;
mci->tot_dimms = tot_dimms;
- mci->n_layers = n_layers;
- memcpy(mci->layers, layers, sizeof(*layer) * n_layers);
mci->nr_csrows = tot_csrows;
mci->num_cschannel = tot_channels;
mci->csbased = per_rank;