When check_kvm_guest() succeeds in looking up a /hypervisor OF node, it
returns without performing a matching put for the lookup, leaving the
node's reference count elevated.
Add the necessary call to of_node_put(), rearranging the code slightly to
avoid repetition or goto.
Signed-off-by: Nathan Lynch <redacted>
Fixes: 107c55005fbd ("powerpc/pseries: Add KVM guest doorbell restrictions")
---
arch/powerpc/kernel/firmware.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
@@ -31,11 +31,10 @@ int __init check_kvm_guest(void)if(!hyper_node)return0;-if(!of_device_is_compatible(hyper_node,"linux,kvm"))-return0;--static_branch_enable(&kvm_guest);+if(of_device_is_compatible(hyper_node,"linux,kvm"))+static_branch_enable(&kvm_guest);+of_node_put(hyper_node);return0;}core_initcall(check_kvm_guest);// before kvm_guest_init()
When check_kvm_guest() succeeds in looking up a /hypervisor OF node, it
returns without performing a matching put for the lookup, leaving the
node's reference count elevated.
Add the necessary call to of_node_put(), rearranging the code slightly to
avoid repetition or goto.
Signed-off-by: Nathan Lynch <redacted>
Fixes: 107c55005fbd ("powerpc/pseries: Add KVM guest doorbell restrictions")
When check_kvm_guest() succeeds in looking up a /hypervisor OF node, it
returns without performing a matching put for the lookup, leaving the
node's reference count elevated.
Add the necessary call to of_node_put(), rearranging the code slightly to
avoid repetition or goto.
Looks good to me.
I do see few other cases where we call of_find_node calls without
of_node_put().
Some of them that I saw were in
find_legacy_serial_ports() in arch/powerpc/kernel/legacy_serial.c
proc_ppc64_create in arch/powerpc/proc/powerpc.c
update_events_in_group in arch/powerpc/perf/imc-pmu.c
cell_iommu_init_disabled in arch/powerpc/platforms/cell/iommu.c
cell_publish_devices in arch/powerpc/platforms/cell/setup.c
spufs_init_isolated_loader in arch/powerpc/platforms/cell/spufs/inode.c
holly_init_pci / holly_restart and holly_init_IRQ in arch/powerpc/platforms/embedded6xx/holly.c
Reviewed-by: Srikar Dronamraju <redacted>
@@ -31,11 +31,10 @@ int __init check_kvm_guest(void)if(!hyper_node)return0;-if(!of_device_is_compatible(hyper_node,"linux,kvm"))-return0;--static_branch_enable(&kvm_guest);+if(of_device_is_compatible(hyper_node,"linux,kvm"))+static_branch_enable(&kvm_guest);+of_node_put(hyper_node);return0;}core_initcall(check_kvm_guest);// before kvm_guest_init()
From: Michael Ellerman <hidden> Date: 2021-10-11 12:11:00
On Tue, 28 Sep 2021 07:45:50 -0500, Nathan Lynch wrote:
When check_kvm_guest() succeeds in looking up a /hypervisor OF node, it
returns without performing a matching put for the lookup, leaving the
node's reference count elevated.
Add the necessary call to of_node_put(), rearranging the code slightly to
avoid repetition or goto.
[...]