Fix bug in libdomain/domain_cap_hash()
authorRazvan Damachi <razvan.damachi@gmail.com>
Sun, 20 Aug 2017 18:18:49 +0000 (20:18 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Thu, 31 Aug 2017 14:35:09 +0000 (16:35 +0200)
Signed-off-by: Razvan Damachi <razvan.damachi@gmail.com>

include/barrelfish_kpi/types.h
lib/barrelfish/domain.c

index 3b47d22..7522f9c 100644 (file)
@@ -117,7 +117,8 @@ typedef uint32_t rsrcid_t;
 #define PRIxRSRCID  PRIx32
 
 /* Domain ID */
-typedef uint32_t domainid_t;
+typedef uint32_t     domainid_t;
+#define MAX_DOMAINID 0xffffffff
 #define PRIuDOMAINID    PRIu32
 #define PRIxDOMAINID    PRIx32
 
index 7d7c690..278725a 100644 (file)
@@ -19,6 +19,7 @@
  * Attn: Systems Group.
  */
 
+#include <limits.h>
 #include <stdio.h>
 #include <barrelfish/barrelfish.h>
 #include <barrelfish/curdispatcher_arch.h>
@@ -1437,10 +1438,12 @@ errval_t domain_cap_hash(struct capref domain_cap, uint64_t *ret_hash)
     if (err_is_fail(err)) {
         return err_push(err, PROC_MGMT_ERR_DOMAIN_CAP_HASH);
     }
-    assert(ret_cap.type == ObjType_Domain);
+    if (ret_cap.type != ObjType_Domain) {
+        return PROC_MGMT_ERR_DOMAIN_CAP_HASH;
+    }
 
-    static uint64_t base = 1 + (uint64_t) MAX_COREID;
-    *ret_hash = base * ret_cap.u.domain.coreid + ret_cap.u.domain.core_local_id;
+    static uint64_t base = 1 + (uint64_t) MAX_DOMAINID;
+    *ret_hash = base * ret_cap.u.domain.core_local_id + ret_cap.u.domain.coreid;
 
     return SYS_ERR_OK;
 }
\ No newline at end of file