sel4utils: Deferred rights reservation creation

Updated sel4utils to support the new vspace interface function:
'vspace_reserve_deferred_rights_range_at_fn'. This enables the
user to create vspace reservations without passing the rights of
the memory region. The rights being deferred to the mapping
invocation.
diff --git a/libsel4utils/include/sel4utils/vspace.h b/libsel4utils/include/sel4utils/vspace.h
index 17d589d..5a5fa86 100644
--- a/libsel4utils/include/sel4utils/vspace.h
+++ b/libsel4utils/include/sel4utils/vspace.h
@@ -65,6 +65,7 @@
     seL4_CapRights_t rights;
     int cacheable;
     int malloced;
+    bool rights_deferred;
     struct sel4utils_res *next;
 };
 
diff --git a/libsel4utils/include/sel4utils/vspace_internal.h b/libsel4utils/include/sel4utils/vspace_internal.h
index 55f545d..f1a391b 100644
--- a/libsel4utils/include/sel4utils/vspace_internal.h
+++ b/libsel4utils/include/sel4utils/vspace_internal.h
@@ -445,6 +445,8 @@
                                               int cacheable, void **vaddr);
 reservation_t sel4utils_reserve_range_at(vspace_t *vspace, void *vaddr, size_t size,
                                          seL4_CapRights_t rights, int cacheable);
+reservation_t sel4utils_reserve_deferred_rights_range_at(vspace_t *vspace, void *vaddr,
+                                                         size_t size, int cacheable);
 void sel4utils_free_reservation(vspace_t *vspace, reservation_t reservation);
 void sel4utils_free_reservation_by_vaddr(vspace_t *vspace, void *vaddr);
 void sel4utils_tear_down(vspace_t *vspace, vka_t *vka);
diff --git a/libsel4utils/src/vspace/bootstrap.c b/libsel4utils/src/vspace/bootstrap.c
index 655fdf2..ad06562 100644
--- a/libsel4utils/src/vspace/bootstrap.c
+++ b/libsel4utils/src/vspace/bootstrap.c
@@ -75,6 +75,7 @@
 
     vspace->reserve_range_aligned = sel4utils_reserve_range_aligned;
     vspace->reserve_range_at = sel4utils_reserve_range_at;
+    vspace->reserve_deferred_rights_range_at = sel4utils_reserve_deferred_rights_range_at;
     vspace->free_reservation = sel4utils_free_reservation;
     vspace->free_reservation_by_vaddr = sel4utils_free_reservation_by_vaddr;
 
diff --git a/libsel4utils/src/vspace/vspace.c b/libsel4utils/src/vspace/vspace.c
index 032cfb8..01254d0 100644
--- a/libsel4utils/src/vspace/vspace.c
+++ b/libsel4utils/src/vspace/vspace.c
@@ -597,6 +597,15 @@
     return reservation;
 }
 
+reservation_t sel4utils_reserve_deferred_rights_range_at(vspace_t *vspace, void *vaddr, size_t size, int cacheable)
+{
+    reservation_t reservation = sel4utils_reserve_range_at(vspace, vaddr, size, seL4_NoRights, cacheable);
+    if (reservation.res != NULL) {
+        ((sel4utils_res_t *)reservation.res)->rights_deferred = true;
+    }
+    return reservation;
+}
+
 void sel4utils_free_reservation(vspace_t *vspace, reservation_t reservation)
 {
     sel4utils_alloc_data_t *data = get_alloc_data(vspace);