Message ID | 3d775a5ac7e26fa5dd4c47f75fef6d5f336de1e3.1622990863.git.christophe.jaillet@wanadoo.fr (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
Series | watchdog: gef_wdt: Fix an error handling path in 'gef_wdt_probe()' | expand |
On Sun, Jun 06, 2021 at 04:49:18PM +0200, Christophe JAILLET wrote: > If an error occurs after a successful 'of_iomap()' call, it must be undone > by a corresponding 'iounmap()' call, as already done in the remove > function. > > Fixes: 3268b5618f38 ("[WATCHDOG] Basic support for GE Fanuc's FPGA based watchdog timer") > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> <Formletter> Please do not submit patches for old-style watchdog drivers unless you have access to the hardware. If you do have access to the hardware, please convert the driver to a new-style watchdog driver. I'll be happy to assist with the conversion if necessary. </Formletter> Thanks, Guenter
diff --git a/drivers/watchdog/gef_wdt.c b/drivers/watchdog/gef_wdt.c index df5406aa7d25..52573176101f 100644 --- a/drivers/watchdog/gef_wdt.c +++ b/drivers/watchdog/gef_wdt.c @@ -264,6 +264,7 @@ static int gef_wdt_probe(struct platform_device *dev) { int timeout = 10; u32 freq; + int ret; bus_clk = 133; /* in MHz */ @@ -280,7 +281,15 @@ static int gef_wdt_probe(struct platform_device *dev) gef_wdt_handler_disable(); /* in case timer was already running */ - return misc_register(&gef_wdt_miscdev); + ret = misc_register(&gef_wdt_miscdev); + if (ret) + goto iounmap_err; + + return 0; + +iounmap_err: + iounmap(gef_wdt_regs); + return ret; } static int gef_wdt_remove(struct platform_device *dev)
If an error occurs after a successful 'of_iomap()' call, it must be undone by a corresponding 'iounmap()' call, as already done in the remove function. Fixes: 3268b5618f38 ("[WATCHDOG] Basic support for GE Fanuc's FPGA based watchdog timer") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- drivers/watchdog/gef_wdt.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)