From fde93c32844440a3bd55c8f0e486d1a2c7704818 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 29 Oct 2013 17:09:32 +0100 Subject: [PATCH] init: don't call Rom_session::dataspace() twice In general, requesting a dataspace from a server twice is no good idea. The server might react in a unrecoverable fashion. E.g. the rom_fs service always throws away the corresponding dataspace from the first call of dataspace(), and constructs a new one. --- os/include/init/child.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/os/include/init/child.h b/os/include/init/child.h index df294889d..68b7d8586 100644 --- a/os/include/init/child.h +++ b/os/include/init/child.h @@ -463,8 +463,8 @@ namespace Init { /** * ELF binary */ - Genode::Rom_connection _binary_rom; - + Genode::Rom_connection _binary_rom; + Genode::Dataspace_capability _binary_rom_ds; /** * Private child configuration */ @@ -510,16 +510,17 @@ namespace Init { _resources(start_node, _name.unique, prio_levels_log2, affinity_space), _entrypoint(cap_session, ENTRYPOINT_STACK_SIZE, _name.unique, false), _binary_rom(_name.file, _name.unique), + _binary_rom_ds(_binary_rom.dataspace()), _config(_resources.ram.cap(), start_node), _server(_resources.ram.cap()), - _child(_binary_rom.dataspace(), _resources.ram.cap(), + _child(_binary_rom_ds, _resources.ram.cap(), _resources.cpu.cap(), _resources.rm.cap(), &_entrypoint, this), _parent_services(parent_services), _child_services(child_services), _labeling_policy(_name.unique), _priority_policy(_resources.prio_levels_log2, _resources.priority), _config_policy("config", _config.dataspace(), &_entrypoint), - _binary_policy("binary", _binary_rom.dataspace(), &_entrypoint), + _binary_policy("binary", _binary_rom_ds, &_entrypoint), _configfile_policy("config", _config.filename()), _pd_args_policy(&_pd_args) {