summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Qiong <liqiong@nfschina.com>2022-08-19 12:15:10 +0800
committerHelge Deller <deller@gmx.de>2022-08-22 11:09:17 +0200
commitd46c742f827fa2326ab1f4faa1cccadb56912341 (patch)
tree7258b655f7ed2a9670ba19d20e4fb0b7d244d7f4
parent4cb2643667c26fc976a4941b92f3770da9ec06a0 (diff)
downloadlwn-d46c742f827fa2326ab1f4faa1cccadb56912341.tar.gz
lwn-d46c742f827fa2326ab1f4faa1cccadb56912341.zip
parisc: ccio-dma: Handle kmalloc failure in ccio_init_resources()
As the possible failure of the kmalloc(), it should be better to fix this error path, check and return '-ENOMEM' error code. Signed-off-by: Li Qiong <liqiong@nfschina.com> Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--drivers/parisc/ccio-dma.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c
index e863eb648379..f223afe47d10 100644
--- a/drivers/parisc/ccio-dma.c
+++ b/drivers/parisc/ccio-dma.c
@@ -1380,15 +1380,17 @@ ccio_init_resource(struct resource *res, char *name, void __iomem *ioaddr)
}
}
-static void __init ccio_init_resources(struct ioc *ioc)
+static int __init ccio_init_resources(struct ioc *ioc)
{
struct resource *res = ioc->mmio_region;
char *name = kmalloc(14, GFP_KERNEL);
-
+ if (unlikely(!name))
+ return -ENOMEM;
snprintf(name, 14, "GSC Bus [%d/]", ioc->hw_path);
ccio_init_resource(res, name, &ioc->ioc_regs->io_io_low);
ccio_init_resource(res + 1, name, &ioc->ioc_regs->io_io_low_hv);
+ return 0;
}
static int new_ioc_area(struct resource *res, unsigned long size,
@@ -1543,7 +1545,10 @@ static int __init ccio_probe(struct parisc_device *dev)
return -ENOMEM;
}
ccio_ioc_init(ioc);
- ccio_init_resources(ioc);
+ if (ccio_init_resources(ioc)) {
+ kfree(ioc);
+ return -ENOMEM;
+ }
hppa_dma_ops = &ccio_ops;
hba = kzalloc(sizeof(*hba), GFP_KERNEL);