This short series fixes an old bug that only happens if a memory allocation fails, which might be the reason why it was never found. When at it an unnecessary jump to a label has been removed to simplify the error path and avoid jumps out of the loop, which might have hidden the bug while reading the code.
Signed-off-by: Javier Carrasco javier.carrasco.cruz@gmail.com --- Javier Carrasco (2): virt: fsl: fix missing of_node_put() on early exit from for_each_compatible_node() virt: fsl: refactor out_of_memory label
drivers/virt/fsl_hypervisor.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) --- base-commit: dec9255a128e19c5fcc3bdb18175d78094cc624d change-id: 20241028-fsl_hypervisor-of_node_put-5051e664f038
Best regards,
Early exits from for_each_compatible_node() require explicit calls to of_node_put() to release the node and avoid leaking the resource. Add the missing call to of_node_put(np) before the 'goto' instruction that jumps out of the loop.
Cc: stable@vger.kernel.org Fixes: 6db7199407ca ("drivers/virt: introduce Freescale hypervisor management driver") Signed-off-by: Javier Carrasco javier.carrasco.cruz@gmail.com --- drivers/virt/fsl_hypervisor.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/virt/fsl_hypervisor.c b/drivers/virt/fsl_hypervisor.c index e92e2ceb12a4..7c7ec13761ba 100644 --- a/drivers/virt/fsl_hypervisor.c +++ b/drivers/virt/fsl_hypervisor.c @@ -846,8 +846,10 @@ static int __init fsl_hypervisor_init(void) }
dbisr = kzalloc(sizeof(*dbisr), GFP_KERNEL); - if (!dbisr) + if (!dbisr) { + of_node_put(np); goto out_of_memory; + }
dbisr->irq = irq; dbisr->doorbell = be32_to_cpup(handle);
linux-stable-mirror@lists.linaro.org