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