diff --git a/base-nova/src/base/ipc/ipc.cc b/base-nova/src/base/ipc/ipc.cc index 6e9031661..458d4a139 100644 --- a/base-nova/src/base/ipc/ipc.cc +++ b/base-nova/src/base/ipc/ipc.cc @@ -57,7 +57,7 @@ static void copy_utcb_to_msgbuf(Nova::Utcb *utcb, Msgbuf_base *rcv_msg) /** * Copy message payload to UTCB message registers */ -static void copy_msgbuf_to_utcb(Nova::Utcb *utcb, Msgbuf_base *snd_msg, +static bool copy_msgbuf_to_utcb(Nova::Utcb *utcb, Msgbuf_base *snd_msg, unsigned num_msg_words, mword_t local_name) { /* look up address and size of message payload */ @@ -87,11 +87,14 @@ static void copy_msgbuf_to_utcb(Nova::Utcb *utcb, Msgbuf_base *snd_msg, int pt_sel = snd_msg->snd_pt_sel(i); if (pt_sel < 0) continue; - utcb->append_item(Nova::Obj_crd(pt_sel, 0), i); + if (!utcb->append_item(Nova::Obj_crd(pt_sel, 0), i)) + return false; } /* we have consumed portal capability selectors, reset message buffer */ snd_msg->snd_reset(); + + return true; } @@ -133,8 +136,11 @@ void Ipc_client::_call() { Nova::Utcb *utcb = (Nova::Utcb *)Thread_base::myself()->utcb(); - copy_msgbuf_to_utcb(utcb, _snd_msg, _write_offset/sizeof(mword_t), - Ipc_ostream::_dst.local_name()); + if (!copy_msgbuf_to_utcb(utcb, _snd_msg, _write_offset/sizeof(mword_t), + Ipc_ostream::_dst.local_name())) { + PERR("could not setup IPC"); + return; + } _rcv_msg->rcv_prepare_pt_sel_window(utcb); /* establish the mapping via a portal traversal */ diff --git a/base-nova/src/base/ipc/pager.cc b/base-nova/src/base/ipc/pager.cc index a39026083..0e6d4fa9b 100644 --- a/base-nova/src/base/ipc/pager.cc +++ b/base-nova/src/base/ipc/pager.cc @@ -57,7 +57,9 @@ void Ipc_pager::set_reply_mapping(Mapping m) { Nova::Utcb *utcb = (Nova::Utcb *)Thread_base::myself()->utcb(); utcb->set_msg_word(0); - utcb->append_item(m.mem_crd(), m.dst_addr()); + bool res = utcb->append_item(m.mem_crd(), m.dst_addr()); + /* one item ever fits on the UTCB */ + (void)res; } diff --git a/base-nova/src/base/pager/pager.cc b/base-nova/src/base/pager/pager.cc index def0b0cda..92e3e67b4 100644 --- a/base-nova/src/base/pager/pager.cc +++ b/base-nova/src/base/pager/pager.cc @@ -79,8 +79,11 @@ void Pager_object::_invoke_handler() utcb->mtd = 0; utcb->set_msg_word(0); - if (event == PT_SEL_STARTUP || event == PT_SEL_PAGE_FAULT) - utcb->append_item(Obj_crd(obj->exc_pt_sel() + event, 0), 0); + if (event == PT_SEL_STARTUP || event == PT_SEL_PAGE_FAULT) { + bool res = utcb->append_item(Obj_crd(obj->exc_pt_sel() + event, 0), 0); + /* one item ever fits on the UTCB */ + (void)res; + } reply(Thread_base::myself()->stack_top()); }