platform: catch denied IO_MEM-session

In case core denies an IO_MEM session, the platform driver should
survive and hand out an invalid capability instead.

genodelabs/genode#5174
This commit is contained in:
Johannes Schlatow 2024-04-11 15:00:56 +02:00 committed by Christian Helmuth
parent edaff9fb96
commit 7a042925fc

View File

@ -78,15 +78,17 @@ Device_component::io_mem(unsigned idx, Range &range)
if (iomem.idx != idx)
return;
if (!iomem.io_mem.constructed())
iomem.io_mem.construct(_env,
iomem.range.start,
iomem.range.size,
iomem.prefetchable);
try {
if (!iomem.io_mem.constructed())
iomem.io_mem.construct(_env,
iomem.range.start,
iomem.range.size,
iomem.prefetchable);
range = iomem.range;
range.start &= 0xfff;
cap = iomem.io_mem->cap();
range = iomem.range;
range.start &= 0xfff;
cap = iomem.io_mem->cap();
} catch (Genode::Service_denied) { }
});
return cap;