Hello,
File ports-foc/src/lib/l4lx/rm.cc, in method Region_manager::reserve_range I see possible resource
leakage:
Region* Region_manager::reserve_range(Genode::size_t size, int align,
Genode::addr_t start)
{
using namespace Genode;
void* addr = 0;
while (true) {
try {
/*
* We attach a managed-dataspace as a placeholder to
* Genode's region-map
*/
Rm_connection *rmc = new (env()->heap()) Rm_connection(0, size);
addr = start ? env()->rm_session()->attach_at(rmc->dataspace(), start)
: env()->rm_session()->attach(rmc->dataspace());
//PDBG("attach done addr=%p!", addr);
break;
} catch(Rm_session::Attach_failed e) {
PWRN("attach failed start=%lx", start);
if (start) /* attach with pre-defined address failed, so search one */
start = 0;
else
return 0;
}
}
/*
* Mark the region reserved, in our region-map by setting the
* dataspace reference to zero.
*/
alloc_addr(size, (addr_t)addr);
Region reg((addr_t)addr, size, 0);
metadata(addr, reg);
return metadata(addr);
}
If env()->rm_session()->attach_at or env()->rm_session()->attach throw exception (looks, this is normal flow),
then rmc and space, allocated from env()->heap() will be lost, right?
--
With best regards,
-- ptr