ARM: ux500: fix ureachable iounmap()
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 22 Feb 2016 08:31:02 +0000 (09:31 +0100)
committerArnd Bergmann <arnd@arndb.de>
Fri, 26 Feb 2016 16:43:48 +0000 (17:43 +0100)
The code was executing a return with a pointer before reaching
iounmap().

Reported-by: David Binderman <dcb314@hotmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/arm/mach-ux500/cpu-db8500.c

index a0ffaad1fb612fe42b059c2e99313d0d30a0d9f6..a557955472ea06376e3bd2d8923bfd4e321b3043 100644 (file)
@@ -76,17 +76,19 @@ static struct arm_pmu_platdata db8500_pmu_platdata = {
 static const char *db8500_read_soc_id(void)
 {
        void __iomem *uid;
+       const char *retstr;
 
        uid = ioremap(U8500_BB_UID_BASE, 0x20);
        if (!uid)
                return NULL;
        /* Throw these device-specific numbers into the entropy pool */
        add_device_randomness(uid, 0x14);
-       return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
+       retstr = kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x",
                         readl((u32 *)uid+0),
                         readl((u32 *)uid+1), readl((u32 *)uid+2),
                         readl((u32 *)uid+3), readl((u32 *)uid+4));
        iounmap(uid);
+       return retstr;
 }
 
 static struct device * __init db8500_soc_device_init(void)