fpga: region: release FPGA region reference in error path
If fpga_region_get_manager() fails in fpga_region_program_fpga(), a reference to the fpga_manager instance previously acquired through fpga_region_get() is retained. Make sure to properly release it in the error case by using a separate jump label which will call fpga_region_put() in before returning. Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Acked-by: Moritz Fischer <mdf@kernel.org> Signed-off-by: Alan Tull <atull@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d721f9bbe6
commit
e73bbf6490
|
@ -245,7 +245,8 @@ static int fpga_region_program_fpga(struct fpga_region *region,
|
||||||
mgr = fpga_region_get_manager(region);
|
mgr = fpga_region_get_manager(region);
|
||||||
if (IS_ERR(mgr)) {
|
if (IS_ERR(mgr)) {
|
||||||
pr_err("failed to get fpga region manager\n");
|
pr_err("failed to get fpga region manager\n");
|
||||||
return PTR_ERR(mgr);
|
ret = PTR_ERR(mgr);
|
||||||
|
goto err_put_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = fpga_region_get_bridges(region, overlay);
|
ret = fpga_region_get_bridges(region, overlay);
|
||||||
|
@ -281,6 +282,7 @@ err_put_br:
|
||||||
fpga_bridges_put(®ion->bridge_list);
|
fpga_bridges_put(®ion->bridge_list);
|
||||||
err_put_mgr:
|
err_put_mgr:
|
||||||
fpga_mgr_put(mgr);
|
fpga_mgr_put(mgr);
|
||||||
|
err_put_region:
|
||||||
fpga_region_put(region);
|
fpga_region_put(region);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue