Skip to content

Commit

Permalink
irqchip/mbigen: Unify the error handling in mbigen_of_create_domain()
Browse files Browse the repository at this point in the history
Dan Carpenter reported that commit fea087f "irqchip/mbigen: move
to use bus_get_dev_root()" leads to the following Smatch static checker
warning:

	drivers/irqchip/irq-mbigen.c:258 mbigen_of_create_domain()
	error: potentially dereferencing uninitialized 'child'.

It should not cause a problem on real hardware, but better to fix the
warning, let's move the bus_get_dev_root() out of the loop, and unify
the error handling to silence it.

Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20230505090654.12793-1-wangkefeng.wang@huawei.com
  • Loading branch information
Kefeng Wang authored and Marc Zyngier committed May 16, 2023
1 parent 1413021 commit cddb536
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions drivers/irqchip/irq-mbigen.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,39 +240,44 @@ static int mbigen_of_create_domain(struct platform_device *pdev,
struct irq_domain *domain;
struct device_node *np;
u32 num_pins;
int ret = 0;

parent = bus_get_dev_root(&platform_bus_type);
if (!parent)
return -ENODEV;

for_each_child_of_node(pdev->dev.of_node, np) {
if (!of_property_read_bool(np, "interrupt-controller"))
continue;

parent = bus_get_dev_root(&platform_bus_type);
if (parent) {
child = of_platform_device_create(np, NULL, parent);
put_device(parent);
if (!child) {
of_node_put(np);
return -ENOMEM;
}
child = of_platform_device_create(np, NULL, parent);
if (!child) {
ret = -ENOMEM;
break;
}

if (of_property_read_u32(child->dev.of_node, "num-pins",
&num_pins) < 0) {
dev_err(&pdev->dev, "No num-pins property\n");
of_node_put(np);
return -EINVAL;
ret = -EINVAL;
break;
}

domain = platform_msi_create_device_domain(&child->dev, num_pins,
mbigen_write_msg,
&mbigen_domain_ops,
mgn_chip);
if (!domain) {
of_node_put(np);
return -ENOMEM;
ret = -ENOMEM;
break;
}
}

return 0;
put_device(parent);
if (ret)
of_node_put(np);

return ret;
}

#ifdef CONFIG_ACPI
Expand Down

0 comments on commit cddb536

Please sign in to comment.