From febb0cc13d88acc824bea0cf27485c5da64e5bf2 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Sun, 13 Mar 2016 18:54:49 +0100 Subject: [PATCH] config: deal gracefully with invalid dataspace cap In scenarios where the config ROM is loaded from a report ROM or any other non-static ROM, config might try to access an invalid dataspace capability. This patch prevents the component from aborting in this case. Fixes #1914 --- repos/os/src/lib/config/config.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/repos/os/src/lib/config/config.cc b/repos/os/src/lib/config/config.cc index bf7a80bb5a..5ac1a25358 100644 --- a/repos/os/src/lib/config/config.cc +++ b/repos/os/src/lib/config/config.cc @@ -17,6 +17,9 @@ using namespace Genode; Xml_node _config_xml_node(Dataspace_capability config_ds) { + if (!config_ds.valid()) + throw Exception(); + return Xml_node(env()->rm_session()->attach(config_ds), Genode::Dataspace_client(config_ds).size()); } @@ -88,6 +91,8 @@ Config *Genode::config() PERR("Could not obtain config file"); } catch (Genode::Xml_node::Invalid_syntax) { PERR("Config file has invalid syntax"); + } catch(...) { + PERR("Config dataspace is invalid"); } } /* do not try again to construct 'config_inst' */