From 7a042925fca3ce4d58bc0e76ea8faebd516d71bc Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 11 Apr 2024 15:00:56 +0200 Subject: [PATCH] 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 --- .../src/drivers/platform/device_component.cc | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/repos/os/src/drivers/platform/device_component.cc b/repos/os/src/drivers/platform/device_component.cc index 182e124fcf..4caae1ac24 100644 --- a/repos/os/src/drivers/platform/device_component.cc +++ b/repos/os/src/drivers/platform/device_component.cc @@ -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;