On Thu, Sep 25, 2025 at 02:44:48PM +0800, Guangshuo Li wrote: > devm_kcalloc() may fail. ndtest_probe() allocates three DMA address > arrays (dcr_dma, label_dma, dimm_dma) and later unconditionally uses > them in ndtest_nvdimm_init(), which can lead to a NULL pointer > dereference under low-memory conditions. > > Check all three allocations and return -ENOMEM if any allocation fails, > jumping to the common error path. Do not emit an extra error message > since the allocator already warns on allocation failure.
Reviewed-by: Alison Schofield <[email protected]> > > Fixes: 9399ab61ad82 ("ndtest: Add dimms to the two buses") > Cc: [email protected] > Signed-off-by: Guangshuo Li <[email protected]> > --- > changelog: > v3: > - Add NULL checks for all three devm_kcalloc() calls and goto the common > error label on failure. > > v2: > - Drop pr_err() on allocation failure; only NULL-check and return -ENOMEM. > - No other changes. > --- > tools/testing/nvdimm/test/ndtest.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/nvdimm/test/ndtest.c > b/tools/testing/nvdimm/test/ndtest.c > index 68a064ce598c..8e3b6be53839 100644 > --- a/tools/testing/nvdimm/test/ndtest.c > +++ b/tools/testing/nvdimm/test/ndtest.c > @@ -850,11 +850,22 @@ static int ndtest_probe(struct platform_device *pdev) > > p->dcr_dma = devm_kcalloc(&p->pdev.dev, NUM_DCR, > sizeof(dma_addr_t), GFP_KERNEL); > + if (!p->dcr_dma) { > + rc = -ENOMEM; > + goto err; > + } > p->label_dma = devm_kcalloc(&p->pdev.dev, NUM_DCR, > sizeof(dma_addr_t), GFP_KERNEL); > + if (!p->label_dma) { > + rc = -ENOMEM; > + goto err; > + } > p->dimm_dma = devm_kcalloc(&p->pdev.dev, NUM_DCR, > sizeof(dma_addr_t), GFP_KERNEL); > - > + if (!p->dimm_dma) { > + rc = -ENOMEM; > + goto err; > + } > rc = ndtest_nvdimm_init(p); > if (rc) > goto err; > -- > 2.43.0 > >

