| From 357953ec771a5be3c1ba6d3d1b04dfb58e4c213b Mon Sep 17 00:00:00 2001 |
| From: Nicholas Mc Guire <hofrat@osadl.org> |
| Date: Sat, 1 Dec 2018 12:57:18 +0100 |
| Subject: gpio: pl061: handle failed allocations |
| |
| [ Upstream commit df209c43a0e8258e096fb722dfbdae4f0dd13fde ] |
| |
| devm_kzalloc(), devm_kstrdup() and devm_kasprintf() all can |
| fail internal allocation and return NULL. Using any of the assigned |
| objects without checking is not safe. As this is early in the boot |
| phase and these allocations really should not fail, any failure here |
| is probably an indication of a more serious issue so it makes little |
| sense to try and rollback the previous allocated resources or try to |
| continue; but rather the probe function is simply exited with -ENOMEM. |
| |
| Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> |
| Fixes: 684284b64aae ("ARM: integrator: add MMCI device to IM-PD1") |
| Signed-off-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm/mach-integrator/impd1.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c |
| index 38b0da300dd5..423a88ff908c 100644 |
| --- a/arch/arm/mach-integrator/impd1.c |
| +++ b/arch/arm/mach-integrator/impd1.c |
| @@ -394,7 +394,11 @@ static int __init_refok impd1_probe(struct lm_device *dev) |
| sizeof(*lookup) + 3 * sizeof(struct gpiod_lookup), |
| GFP_KERNEL); |
| chipname = devm_kstrdup(&dev->dev, devname, GFP_KERNEL); |
| - mmciname = kasprintf(GFP_KERNEL, "lm%x:00700", dev->id); |
| + mmciname = devm_kasprintf(&dev->dev, GFP_KERNEL, |
| + "lm%x:00700", dev->id); |
| + if (!lookup || !chipname || !mmciname) |
| + return -ENOMEM; |
| + |
| lookup->dev_id = mmciname; |
| /* |
| * Offsets on GPIO block 1: |
| -- |
| 2.19.1 |
| |