diff options
| author | Rosen Penev <rosenp@gmail.com> | 2026-03-26 19:48:28 -0700 |
|---|---|---|
| committer | Borislav Petkov (AMD) <bp@alien8.de> | 2026-03-31 19:15:21 +0200 |
| commit | 62ba6d66b22356a6a78fd015c37fd108710dfc32 (patch) | |
| tree | 53ffb7a9b28f45cd831db13d69085e0750247c5c /drivers/edac | |
| parent | 489b33708eda8b5f6a0cddb5a4964b56c12f52e2 (diff) | |
| download | linux-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.c | 10 |
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; |
