From d3d3351b99cfbacba66bf11c574a0af043859db0 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 5 May 2023 09:21:01 +0200 Subject: [PATCH] base-nova: fix map for small sizes Changes to the platform driver triggered a map() error while mapping an address block at 0x3000 of size 0x800. Since the mapped size was larger, the loop continued and tried mapping address 0x4000 where no dataspace was found. genodelabs/genode#4761 --- repos/base-nova/src/core/pd_session_support.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/base-nova/src/core/pd_session_support.cc b/repos/base-nova/src/core/pd_session_support.cc index 6bd0a71529..0db5f3a191 100644 --- a/repos/base-nova/src/core/pd_session_support.cc +++ b/repos/base-nova/src/core/pd_session_support.cc @@ -99,7 +99,7 @@ void Pd_session_component::map(addr_t virt, addr_t size) while (size) { addr_t mapped = _address_space.apply_to_dataspace(virt, lambda); virt += mapped; - size = size < mapped ? size : size - mapped; + size = size < mapped ? 0 : size - mapped; } } catch (...) { error(__func__, " failed ", Hex(virt), "+", Hex(size));