From bbce38cb365a594f344390bdd054244fb5a0baa1 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 13 Mar 2012 15:44:23 +0100 Subject: [PATCH] Do not marshal invalid capabilities on NOVA/x86 We send a local name of ~0L instead, if this is encountered during the unmarshalling we generate an invalid 'Native_capability' (Fixes #148). --- base-nova/include/base/ipc.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/base-nova/include/base/ipc.h b/base-nova/include/base/ipc.h index 7095cc98b..3cb3aed27 100644 --- a/base-nova/include/base/ipc.h +++ b/base-nova/include/base/ipc.h @@ -19,9 +19,11 @@ inline void Genode::Ipc_ostream::_marshal_capability(Genode::Native_capability const &cap) { - long unique_id = cap.local_name(); + long unique_id = cap.valid() ? cap.local_name() : ~0L; _write_to_buf(unique_id); - _snd_msg->snd_append_pt_sel(cap.dst()); + + if (cap.valid()) + _snd_msg->snd_append_pt_sel(cap.dst()); } @@ -29,7 +31,7 @@ inline void Genode::Ipc_istream::_unmarshal_capability(Genode::Native_capability { long unique_id = 0; _read_from_buf(unique_id); - int pt_sel = _rcv_msg->rcv_pt_sel(); + int pt_sel = unique_id != ~0L ? _rcv_msg->rcv_pt_sel() : 0; cap = Native_capability(pt_sel, unique_id); }