Takashi Iwai 5361d5
From 8ab5fc55d7f65d58a3c3aeadf11bdf60267cd2bd Mon Sep 17 00:00:00 2001
Takashi Iwai 5361d5
From: Ke Zhang <m202171830@hust.edu.cn>
Takashi Iwai 5361d5
Date: Fri, 28 Apr 2023 11:16:36 +0800
Takashi Iwai 5361d5
Subject: [PATCH] serial: arc_uart: fix of_iomap leak in `arc_serial_probe`
Takashi Iwai 5361d5
Git-commit: 8ab5fc55d7f65d58a3c3aeadf11bdf60267cd2bd
Takashi Iwai 5361d5
Patch-mainline: 6.4-rc3
Takashi Iwai 5361d5
References: git-fixes
Takashi Iwai 5361d5
Takashi Iwai 5361d5
Smatch reports:
Takashi Iwai 5361d5
Takashi Iwai 5361d5
drivers/tty/serial/arc_uart.c:631 arc_serial_probe() warn:
Takashi Iwai 5361d5
'port->membase' from of_iomap() not released on lines: 631.
Takashi Iwai 5361d5
Takashi Iwai 5361d5
In arc_serial_probe(), if uart_add_one_port() fails,
Takashi Iwai 5361d5
port->membase is not released, which would cause a resource leak.
Takashi Iwai 5361d5
Takashi Iwai 5361d5
To fix this, I replace of_iomap with devm_platform_ioremap_resource.
Takashi Iwai 5361d5
Takashi Iwai 5361d5
Fixes: 8dbe1d5e09a7 ("serial/arc: inline the probe helper")
Takashi Iwai 5361d5
Signed-off-by: Ke Zhang <m202171830@hust.edu.cn>
Takashi Iwai 5361d5
Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
Takashi Iwai 5361d5
Link: https://lore.kernel.org/r/20230428031636.44642-1-m202171830@hust.edu.cn
Takashi Iwai 5361d5
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Takashi Iwai 5361d5
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 5361d5
Takashi Iwai 5361d5
---
Takashi Iwai 5361d5
 drivers/tty/serial/arc_uart.c | 7 ++++---
Takashi Iwai 5361d5
 1 file changed, 4 insertions(+), 3 deletions(-)
Takashi Iwai 5361d5
Takashi Iwai 5361d5
diff --git a/drivers/tty/serial/arc_uart.c b/drivers/tty/serial/arc_uart.c
Takashi Iwai 5361d5
index 59e25f2b6632..4b2512eef577 100644
Takashi Iwai 5361d5
--- a/drivers/tty/serial/arc_uart.c
Takashi Iwai 5361d5
+++ b/drivers/tty/serial/arc_uart.c
Takashi Iwai 5361d5
@@ -606,10 +606,11 @@ static int arc_serial_probe(struct platform_device *pdev)
Takashi Iwai 5361d5
 	}
Takashi Iwai 5361d5
 	uart->baud = val;
Takashi Iwai 5361d5
 
Takashi Iwai 5361d5
-	port->membase = of_iomap(np, 0);
Takashi Iwai 5361d5
-	if (!port->membase)
Takashi Iwai 5361d5
+	port->membase = devm_platform_ioremap_resource(pdev, 0);
Takashi Iwai 5361d5
+	if (IS_ERR(port->membase)) {
Takashi Iwai 5361d5
 		/* No point of dev_err since UART itself is hosed here */
Takashi Iwai 5361d5
-		return -ENXIO;
Takashi Iwai 5361d5
+		return PTR_ERR(port->membase);
Takashi Iwai 5361d5
+	}
Takashi Iwai 5361d5
 
Takashi Iwai 5361d5
 	port->irq = irq_of_parse_and_map(np, 0);
Takashi Iwai 5361d5
 
Takashi Iwai 5361d5
-- 
Takashi Iwai 5361d5
2.35.3
Takashi Iwai 5361d5