From: Daniel Scheller Date: Sun, 17 Dec 2017 15:40:47 +0000 (-0500) Subject: media: ddbridge: fix deinit order in case of failure in ddb_init() X-Git-Tag: v5.15~9456^2~128 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b7b9a5a93b7d859dacc3dff312346b4ab23fa60d;p=platform%2Fkernel%2Flinux-starfive.git media: ddbridge: fix deinit order in case of failure in ddb_init() In ddb_init(), the deinitialization sequence isn't correct when handling errors, and could even lead to a memleak depending on where things failed. Fix the deinit order. Signed-off-by: Daniel Scheller Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/pci/ddbridge/ddbridge-core.c b/drivers/media/pci/ddbridge/ddbridge-core.c index c2013d1..e68ca00 100644 --- a/drivers/media/pci/ddbridge/ddbridge-core.c +++ b/drivers/media/pci/ddbridge/ddbridge-core.c @@ -3279,7 +3279,7 @@ int ddb_init(struct ddb *dev) ddb_init_boards(dev); if (ddb_i2c_init(dev) < 0) - goto fail; + goto fail1; ddb_ports_init(dev); if (ddb_buffers_alloc(dev) < 0) { dev_info(dev->dev, "Could not allocate buffer memory\n"); @@ -3297,14 +3297,14 @@ int ddb_init(struct ddb *dev) return 0; fail3: - ddb_ports_detach(dev); dev_err(dev->dev, "fail3\n"); - ddb_ports_release(dev); + ddb_ports_detach(dev); + ddb_buffers_free(dev); fail2: dev_err(dev->dev, "fail2\n"); - ddb_buffers_free(dev); + ddb_ports_release(dev); ddb_i2c_release(dev); -fail: +fail1: dev_err(dev->dev, "fail1\n"); return -1; }