From 241ed3591ed1bf168b2e510fa21aafce7df82c96 Mon Sep 17 00:00:00 2001 From: PM Holtmo Date: Fri, 23 May 2025 16:10:25 +0200 Subject: [PATCH] lib/cpp: Fix memory leaks in LldpCtl LldpCtl::GetInterfaces() and LldpAtom::GetAtomList() did not decrement ref for retrieved atoms Ensure parent atom outlives its children atoms --- src/lib/lldpctl.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/lldpctl.hpp b/src/lib/lldpctl.hpp index 7f7eabd6..e2e301a7 100644 --- a/src/lib/lldpctl.hpp +++ b/src/lib/lldpctl.hpp @@ -233,8 +233,10 @@ class LldpAtom { lldpctl_atom_t *atom; lldpctl_atom_foreach(it, atom) { - list.emplace_back(atom, true, conn_); + list.emplace_back(atom, true, conn_, + std::make_unique(*this)); } + ::lldpctl_atom_dec_ref(it); return list; } @@ -364,7 +366,7 @@ class LldpCtl { std::list GetInterfaces() const { - const auto &it { ::lldpctl_get_interfaces(conn_.get()) }; + auto *it { ::lldpctl_get_interfaces(conn_.get()) }; std::list list; lldpctl_atom_t *atom; @@ -372,6 +374,7 @@ class LldpCtl { { list.emplace_back(atom, true, conn_); } + ::lldpctl_atom_dec_ref(it); return list; } -- 2.39.5