From 323a9cc088615a6e17672bb10816499b4fa7d363 Mon Sep 17 00:00:00 2001 From: Sparchatus Date: Mon, 2 May 2022 09:11:03 +0000 Subject: [PATCH] Bugfix slot allocation during urpc causes cap reuse --- lib/aos/aos_urpc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/aos/aos_urpc.c b/lib/aos/aos_urpc.c index 256b2af..4d1f098 100644 --- a/lib/aos/aos_urpc.c +++ b/lib/aos/aos_urpc.c @@ -29,6 +29,12 @@ errval_t do_aos_urpc( ) { errval_t err; + // allocate the return capability before performing the rpc call + if(ret_cap != NULL) { + err = slot_alloc(ret_cap); + if (err_is_fail(err)) return err_push(err, LIB_ERR_SLOT_ALLOC); + } + assert(rpc->meta->call_in_progress == 0); assert(capref_is_null(arg_cap)); @@ -62,9 +68,8 @@ errval_t do_aos_urpc( if (ret0 != NULL) *ret0 = rpc->meta->a2; if (ret1 != NULL) *ret1 = rpc->meta->a3; - if(ret_cap != NULL && rpc->meta->cap.type == ObjType_RAM) { - err = slot_alloc(ret_cap); - if (err_is_fail(err)) return err_push(err, LIB_ERR_SLOT_ALLOC); + if(ret_cap != NULL) { + assert(rpc->meta->cap.type == ObjType_RAM); err = ram_forge(*ret_cap, rpc->meta->cap.u.ram.base, rpc->meta->cap.u.ram.bytes, my_core_id); if (err_is_fail(err)) return err; }