Browse Source

Fix the limitation on the number of trusted files (#87)

* Support a large number of trusted files. (Issue #9)

* Config counts overall key size of entries
Jaehyun Han 6 years ago
parent
commit
d782947948

+ 3 - 7
LibOS/shim/src/fs/shim_fs.c

@@ -174,14 +174,10 @@ static int __mount_others (void)
     if (!root_config)
         return 0;
 
-    int nkeys, keybuf_size = CONFIG_MAX;
-    char * keybuf = __alloca(keybuf_size);
+    int nkeys;
+    char * keybuf = __alloca(get_config_entries_size(root_config, "fs.mount"));
 
-    while ((nkeys = get_config_entries(root_config, "fs.mount", keybuf,
-                                       keybuf_size)) == -ENAMETOOLONG) {
-        keybuf = __alloca(keybuf_size);
-        keybuf_size *= 2;
-    }
+    nkeys = get_config_entries(root_config, "fs.mount", keybuf);
 
     if (nkeys < 0)
         return 0;

+ 6 - 14
LibOS/shim/src/sys/shim_sandbox.c

@@ -73,14 +73,10 @@ static int isolate_fs (struct config_store * cfg, const char * path)
     bool root_created = false;
     char t[CONFIG_MAX], u[CONFIG_MAX];
 
-    int nkeys, keybuf_size = CONFIG_MAX;
-    char * keybuf = __alloca(keybuf_size);
+    int nkeys;
+    char * keybuf = __alloca(get_config_entries_size(cfg, "fs.mount.other"));
 
-    while ((nkeys = get_config_entries(cfg, "fs.mount.other", keybuf,
-                                       keybuf_size)) == -ENAMETOOLONG) {
-        keybuf_size *= 2;
-        keybuf = __alloca(keybuf_size);
-    }
+    nkeys = get_config_entries(cfg, "fs.mount.other", keybuf);
 
     if (nkeys <= 0)
         goto root;
@@ -187,15 +183,11 @@ root:
 
 static int isolate_net (struct config_store * cfg, struct net_sb * sb)
 {
-    int nkeys, keybuf_size = CONFIG_MAX;
+    int nkeys;
     char k[CONFIG_MAX];
-    char * keybuf = __alloca(keybuf_size);
+    char * keybuf = __alloca(get_config_entries_size(cfg, "net.rules"));
 
-    while ((nkeys = get_config_entries(cfg, "net.rules", keybuf,
-                                       keybuf_size)) == -ENAMETOOLONG) {
-        keybuf_size *= 2;
-        keybuf = __alloca(keybuf_size);
-    }
+    nkeys = get_config_entries(cfg, "net.rules", keybuf);
 
     if (nkeys <= 0)
         goto add;

+ 2 - 1
Pal/lib/api.h

@@ -132,7 +132,8 @@ int write_config (void * file, int (*write) (void *, void *, int),
 int get_config (struct config_store * cfg, const char * key,
                 char * val_buf, int size);
 int get_config_entries (struct config_store * cfg, const char * key,
-                        char * key_buf, int size);
+                        char * key_buf);
+int get_config_entries_size (struct config_store * cfg, const char * key);
 int set_config (struct config_store * cfg, const char * key, const char * val);
 
 #define CONFIG_MAX      4096

+ 23 - 8
Pal/lib/graphene/config.c

@@ -32,6 +32,7 @@ DEFINE_LIST(config);
 struct config {
     const char * key, * val;
     int klen, vlen;
+    int entries_size;
     char * buf;
     LIST_TYPE(config) list;
     LISTP_TYPE(config) children;
@@ -45,6 +46,7 @@ static int __add_config (struct config_store * store,
 {
     LISTP_TYPE(config) * list = &store->root;
     struct config * e = NULL;
+    struct config * parent = NULL;
 
     while (klen) {
         if (e && e->val)
@@ -69,11 +71,14 @@ static int __add_config (struct config_store * store,
         e->val  = NULL;
         e->vlen = 0;
         e->buf  = NULL;
+        e->entries_size = 0;
         INIT_LIST_HEAD(e, list);
         listp_add_tail(e, &store->entries, list);
         INIT_LISTP(&e->children);
         INIT_LIST_HEAD(e, siblings);
         listp_add_tail(e, list, siblings);
+        if (parent)
+            parent->entries_size += (len + 1);
 
 next:
         if (len < klen)
@@ -81,6 +86,7 @@ next:
         key += len;
         klen -= len;
         list = &e->children;
+        parent = e;
     }
 
     if (!e || e->val || !listp_empty(&e->children))
@@ -141,7 +147,7 @@ int get_config (struct config_store * store, const char * key,
 }
 
 int get_config_entries (struct config_store * store, const char * key,
-                        char * key_buf, int size)
+                        char * key_buf)
 {
     struct config * e = __get_config(store, key);
 
@@ -152,21 +158,27 @@ int get_config_entries (struct config_store * store, const char * key,
     int nentries = 0;
 
     listp_for_each_entry(e, children, siblings) {
-        if (e->klen >= size)
-            return -PAL_ERROR_TOOLONG;
-
         memcpy(key_buf, e->key, e->klen);
         key_buf[e->klen] = 0;
         key_buf += e->klen + 1;
-        size -= e->klen + 1;
         nentries++;
     }
 
     return nentries;
 }
+int get_config_entries_size (struct config_store * store, const char * key)
+{
+    struct config * e = __get_config(store, key);
+
+    if (!e || e->val)
+        return -PAL_ERROR_INVAL;
+
+    return e->entries_size;
+}
 
 static int __del_config (struct config_store * store,
-                         LISTP_TYPE(config) * root, const char * key)
+                         LISTP_TYPE(config) * root, struct config * p, 
+                         const char * key)
 {
     struct config * e, * found = NULL;
     int len = 0;
@@ -186,7 +198,7 @@ static int __del_config (struct config_store * store,
     if (key[len]) {
         if (found->val)
             return -PAL_ERROR_INVAL;
-        int ret = __del_config(store, &found->children, key + len + 1);
+        int ret = __del_config(store, &found->children, found, key + len + 1);
         if (ret < 0)
             return ret;
         if (!listp_empty(&found->children))
@@ -196,6 +208,8 @@ static int __del_config (struct config_store * store,
             return -PAL_ERROR_INVAL;
     }
 
+    if (p)
+        p->entries_size -= (found->klen + 1);
     listp_del(found, root, siblings);
     listp_del(found, &store->entries, list);
     if (found->buf)
@@ -211,7 +225,7 @@ int set_config (struct config_store * store, const char * key, const char * val)
         return -PAL_ERROR_INVAL;
 
     if (!val) { /* deletion */
-        return __del_config(store, &store->root, key);
+        return __del_config(store, &store->root, 0, key);
     }
 
     int klen = strlen(key);
@@ -419,6 +433,7 @@ static int __dup_config (const struct config_store * ss,
         new->val  = val;
         new->vlen = e->vlen;
         new->buf  = buf;
+        new->entries_size = e->entries_size;
         INIT_LIST_HEAD(new, list);
         listp_add_tail(new, &ts->entries, list);
         INIT_LISTP(&new->children);

+ 10 - 0
Pal/regression/00_Bootstrap.py

@@ -127,3 +127,13 @@ if sgx:
 
     rv = regression.run_checks()
     if rv: sys.exit(rv)
+
+# Running Bootstrap7.manifest
+regression = Regression(loader, manifest_file("Bootstrap7"))
+
+regression.add_check(name="Load Large Number of Items in Manifest",
+    check=lambda res: "key1000=na" in res[0].log and
+                      "key1=na" in res[0].log)
+
+rv = regression.run_checks()
+if rv: sys.exit(rv)

+ 19 - 0
Pal/regression/Bootstrap7.c

@@ -0,0 +1,19 @@
+/* -*- mode:c; c-file-style:"k&r"; c-basic-offset: 4; tab-width:4; indent-tabs-mode:nil; mode:auto-fill; fill-column:78; -*- */
+/* vim: set ts=4 sw=4 et tw=78 fo=cqt wm=0: */
+
+#include "pal_debug.h"
+
+int main (int argc, char ** argv, char ** envp)
+{
+    /* check if the programriables in the manifest should appear  is loaded */
+    pal_printf("User Program Started\n");
+
+    /* check control block */
+    /* print all environmental variables */
+    /* environmental variables in Manifest should appear */
+    for (int i = 0; envp[i]; i++) {
+        pal_printf("%s\n", envp[i]);    
+    }
+
+    return 0;
+}

+ 1005 - 0
Pal/regression/Bootstrap7.manifest.template

@@ -0,0 +1,1005 @@
+#!$(PAL)
+
+loader.exec = file:Bootstrap7
+loader.execname = Bootstrap7
+
+loader.env.key1 = na
+loader.env.key2 = na
+loader.env.key3 = na
+loader.env.key4 = na
+loader.env.key5 = na
+loader.env.key6 = na
+loader.env.key7 = na
+loader.env.key8 = na
+loader.env.key9 = na
+loader.env.key10 = na
+loader.env.key11 = na
+loader.env.key12 = na
+loader.env.key13 = na
+loader.env.key14 = na
+loader.env.key15 = na
+loader.env.key16 = na
+loader.env.key17 = na
+loader.env.key18 = na
+loader.env.key19 = na
+loader.env.key20 = na
+loader.env.key21 = na
+loader.env.key22 = na
+loader.env.key23 = na
+loader.env.key24 = na
+loader.env.key25 = na
+loader.env.key26 = na
+loader.env.key27 = na
+loader.env.key28 = na
+loader.env.key29 = na
+loader.env.key30 = na
+loader.env.key31 = na
+loader.env.key32 = na
+loader.env.key33 = na
+loader.env.key34 = na
+loader.env.key35 = na
+loader.env.key36 = na
+loader.env.key37 = na
+loader.env.key38 = na
+loader.env.key39 = na
+loader.env.key40 = na
+loader.env.key41 = na
+loader.env.key42 = na
+loader.env.key43 = na
+loader.env.key44 = na
+loader.env.key45 = na
+loader.env.key46 = na
+loader.env.key47 = na
+loader.env.key48 = na
+loader.env.key49 = na
+loader.env.key50 = na
+loader.env.key51 = na
+loader.env.key52 = na
+loader.env.key53 = na
+loader.env.key54 = na
+loader.env.key55 = na
+loader.env.key56 = na
+loader.env.key57 = na
+loader.env.key58 = na
+loader.env.key59 = na
+loader.env.key60 = na
+loader.env.key61 = na
+loader.env.key62 = na
+loader.env.key63 = na
+loader.env.key64 = na
+loader.env.key65 = na
+loader.env.key66 = na
+loader.env.key67 = na
+loader.env.key68 = na
+loader.env.key69 = na
+loader.env.key70 = na
+loader.env.key71 = na
+loader.env.key72 = na
+loader.env.key73 = na
+loader.env.key74 = na
+loader.env.key75 = na
+loader.env.key76 = na
+loader.env.key77 = na
+loader.env.key78 = na
+loader.env.key79 = na
+loader.env.key80 = na
+loader.env.key81 = na
+loader.env.key82 = na
+loader.env.key83 = na
+loader.env.key84 = na
+loader.env.key85 = na
+loader.env.key86 = na
+loader.env.key87 = na
+loader.env.key88 = na
+loader.env.key89 = na
+loader.env.key90 = na
+loader.env.key91 = na
+loader.env.key92 = na
+loader.env.key93 = na
+loader.env.key94 = na
+loader.env.key95 = na
+loader.env.key96 = na
+loader.env.key97 = na
+loader.env.key98 = na
+loader.env.key99 = na
+loader.env.key100 = na
+loader.env.key101 = na
+loader.env.key102 = na
+loader.env.key103 = na
+loader.env.key104 = na
+loader.env.key105 = na
+loader.env.key106 = na
+loader.env.key107 = na
+loader.env.key108 = na
+loader.env.key109 = na
+loader.env.key110 = na
+loader.env.key111 = na
+loader.env.key112 = na
+loader.env.key113 = na
+loader.env.key114 = na
+loader.env.key115 = na
+loader.env.key116 = na
+loader.env.key117 = na
+loader.env.key118 = na
+loader.env.key119 = na
+loader.env.key120 = na
+loader.env.key121 = na
+loader.env.key122 = na
+loader.env.key123 = na
+loader.env.key124 = na
+loader.env.key125 = na
+loader.env.key126 = na
+loader.env.key127 = na
+loader.env.key128 = na
+loader.env.key129 = na
+loader.env.key130 = na
+loader.env.key131 = na
+loader.env.key132 = na
+loader.env.key133 = na
+loader.env.key134 = na
+loader.env.key135 = na
+loader.env.key136 = na
+loader.env.key137 = na
+loader.env.key138 = na
+loader.env.key139 = na
+loader.env.key140 = na
+loader.env.key141 = na
+loader.env.key142 = na
+loader.env.key143 = na
+loader.env.key144 = na
+loader.env.key145 = na
+loader.env.key146 = na
+loader.env.key147 = na
+loader.env.key148 = na
+loader.env.key149 = na
+loader.env.key150 = na
+loader.env.key151 = na
+loader.env.key152 = na
+loader.env.key153 = na
+loader.env.key154 = na
+loader.env.key155 = na
+loader.env.key156 = na
+loader.env.key157 = na
+loader.env.key158 = na
+loader.env.key159 = na
+loader.env.key160 = na
+loader.env.key161 = na
+loader.env.key162 = na
+loader.env.key163 = na
+loader.env.key164 = na
+loader.env.key165 = na
+loader.env.key166 = na
+loader.env.key167 = na
+loader.env.key168 = na
+loader.env.key169 = na
+loader.env.key170 = na
+loader.env.key171 = na
+loader.env.key172 = na
+loader.env.key173 = na
+loader.env.key174 = na
+loader.env.key175 = na
+loader.env.key176 = na
+loader.env.key177 = na
+loader.env.key178 = na
+loader.env.key179 = na
+loader.env.key180 = na
+loader.env.key181 = na
+loader.env.key182 = na
+loader.env.key183 = na
+loader.env.key184 = na
+loader.env.key185 = na
+loader.env.key186 = na
+loader.env.key187 = na
+loader.env.key188 = na
+loader.env.key189 = na
+loader.env.key190 = na
+loader.env.key191 = na
+loader.env.key192 = na
+loader.env.key193 = na
+loader.env.key194 = na
+loader.env.key195 = na
+loader.env.key196 = na
+loader.env.key197 = na
+loader.env.key198 = na
+loader.env.key199 = na
+loader.env.key200 = na
+loader.env.key201 = na
+loader.env.key202 = na
+loader.env.key203 = na
+loader.env.key204 = na
+loader.env.key205 = na
+loader.env.key206 = na
+loader.env.key207 = na
+loader.env.key208 = na
+loader.env.key209 = na
+loader.env.key210 = na
+loader.env.key211 = na
+loader.env.key212 = na
+loader.env.key213 = na
+loader.env.key214 = na
+loader.env.key215 = na
+loader.env.key216 = na
+loader.env.key217 = na
+loader.env.key218 = na
+loader.env.key219 = na
+loader.env.key220 = na
+loader.env.key221 = na
+loader.env.key222 = na
+loader.env.key223 = na
+loader.env.key224 = na
+loader.env.key225 = na
+loader.env.key226 = na
+loader.env.key227 = na
+loader.env.key228 = na
+loader.env.key229 = na
+loader.env.key230 = na
+loader.env.key231 = na
+loader.env.key232 = na
+loader.env.key233 = na
+loader.env.key234 = na
+loader.env.key235 = na
+loader.env.key236 = na
+loader.env.key237 = na
+loader.env.key238 = na
+loader.env.key239 = na
+loader.env.key240 = na
+loader.env.key241 = na
+loader.env.key242 = na
+loader.env.key243 = na
+loader.env.key244 = na
+loader.env.key245 = na
+loader.env.key246 = na
+loader.env.key247 = na
+loader.env.key248 = na
+loader.env.key249 = na
+loader.env.key250 = na
+loader.env.key251 = na
+loader.env.key252 = na
+loader.env.key253 = na
+loader.env.key254 = na
+loader.env.key255 = na
+loader.env.key256 = na
+loader.env.key257 = na
+loader.env.key258 = na
+loader.env.key259 = na
+loader.env.key260 = na
+loader.env.key261 = na
+loader.env.key262 = na
+loader.env.key263 = na
+loader.env.key264 = na
+loader.env.key265 = na
+loader.env.key266 = na
+loader.env.key267 = na
+loader.env.key268 = na
+loader.env.key269 = na
+loader.env.key270 = na
+loader.env.key271 = na
+loader.env.key272 = na
+loader.env.key273 = na
+loader.env.key274 = na
+loader.env.key275 = na
+loader.env.key276 = na
+loader.env.key277 = na
+loader.env.key278 = na
+loader.env.key279 = na
+loader.env.key280 = na
+loader.env.key281 = na
+loader.env.key282 = na
+loader.env.key283 = na
+loader.env.key284 = na
+loader.env.key285 = na
+loader.env.key286 = na
+loader.env.key287 = na
+loader.env.key288 = na
+loader.env.key289 = na
+loader.env.key290 = na
+loader.env.key291 = na
+loader.env.key292 = na
+loader.env.key293 = na
+loader.env.key294 = na
+loader.env.key295 = na
+loader.env.key296 = na
+loader.env.key297 = na
+loader.env.key298 = na
+loader.env.key299 = na
+loader.env.key300 = na
+loader.env.key301 = na
+loader.env.key302 = na
+loader.env.key303 = na
+loader.env.key304 = na
+loader.env.key305 = na
+loader.env.key306 = na
+loader.env.key307 = na
+loader.env.key308 = na
+loader.env.key309 = na
+loader.env.key310 = na
+loader.env.key311 = na
+loader.env.key312 = na
+loader.env.key313 = na
+loader.env.key314 = na
+loader.env.key315 = na
+loader.env.key316 = na
+loader.env.key317 = na
+loader.env.key318 = na
+loader.env.key319 = na
+loader.env.key320 = na
+loader.env.key321 = na
+loader.env.key322 = na
+loader.env.key323 = na
+loader.env.key324 = na
+loader.env.key325 = na
+loader.env.key326 = na
+loader.env.key327 = na
+loader.env.key328 = na
+loader.env.key329 = na
+loader.env.key330 = na
+loader.env.key331 = na
+loader.env.key332 = na
+loader.env.key333 = na
+loader.env.key334 = na
+loader.env.key335 = na
+loader.env.key336 = na
+loader.env.key337 = na
+loader.env.key338 = na
+loader.env.key339 = na
+loader.env.key340 = na
+loader.env.key341 = na
+loader.env.key342 = na
+loader.env.key343 = na
+loader.env.key344 = na
+loader.env.key345 = na
+loader.env.key346 = na
+loader.env.key347 = na
+loader.env.key348 = na
+loader.env.key349 = na
+loader.env.key350 = na
+loader.env.key351 = na
+loader.env.key352 = na
+loader.env.key353 = na
+loader.env.key354 = na
+loader.env.key355 = na
+loader.env.key356 = na
+loader.env.key357 = na
+loader.env.key358 = na
+loader.env.key359 = na
+loader.env.key360 = na
+loader.env.key361 = na
+loader.env.key362 = na
+loader.env.key363 = na
+loader.env.key364 = na
+loader.env.key365 = na
+loader.env.key366 = na
+loader.env.key367 = na
+loader.env.key368 = na
+loader.env.key369 = na
+loader.env.key370 = na
+loader.env.key371 = na
+loader.env.key372 = na
+loader.env.key373 = na
+loader.env.key374 = na
+loader.env.key375 = na
+loader.env.key376 = na
+loader.env.key377 = na
+loader.env.key378 = na
+loader.env.key379 = na
+loader.env.key380 = na
+loader.env.key381 = na
+loader.env.key382 = na
+loader.env.key383 = na
+loader.env.key384 = na
+loader.env.key385 = na
+loader.env.key386 = na
+loader.env.key387 = na
+loader.env.key388 = na
+loader.env.key389 = na
+loader.env.key390 = na
+loader.env.key391 = na
+loader.env.key392 = na
+loader.env.key393 = na
+loader.env.key394 = na
+loader.env.key395 = na
+loader.env.key396 = na
+loader.env.key397 = na
+loader.env.key398 = na
+loader.env.key399 = na
+loader.env.key400 = na
+loader.env.key401 = na
+loader.env.key402 = na
+loader.env.key403 = na
+loader.env.key404 = na
+loader.env.key405 = na
+loader.env.key406 = na
+loader.env.key407 = na
+loader.env.key408 = na
+loader.env.key409 = na
+loader.env.key410 = na
+loader.env.key411 = na
+loader.env.key412 = na
+loader.env.key413 = na
+loader.env.key414 = na
+loader.env.key415 = na
+loader.env.key416 = na
+loader.env.key417 = na
+loader.env.key418 = na
+loader.env.key419 = na
+loader.env.key420 = na
+loader.env.key421 = na
+loader.env.key422 = na
+loader.env.key423 = na
+loader.env.key424 = na
+loader.env.key425 = na
+loader.env.key426 = na
+loader.env.key427 = na
+loader.env.key428 = na
+loader.env.key429 = na
+loader.env.key430 = na
+loader.env.key431 = na
+loader.env.key432 = na
+loader.env.key433 = na
+loader.env.key434 = na
+loader.env.key435 = na
+loader.env.key436 = na
+loader.env.key437 = na
+loader.env.key438 = na
+loader.env.key439 = na
+loader.env.key440 = na
+loader.env.key441 = na
+loader.env.key442 = na
+loader.env.key443 = na
+loader.env.key444 = na
+loader.env.key445 = na
+loader.env.key446 = na
+loader.env.key447 = na
+loader.env.key448 = na
+loader.env.key449 = na
+loader.env.key450 = na
+loader.env.key451 = na
+loader.env.key452 = na
+loader.env.key453 = na
+loader.env.key454 = na
+loader.env.key455 = na
+loader.env.key456 = na
+loader.env.key457 = na
+loader.env.key458 = na
+loader.env.key459 = na
+loader.env.key460 = na
+loader.env.key461 = na
+loader.env.key462 = na
+loader.env.key463 = na
+loader.env.key464 = na
+loader.env.key465 = na
+loader.env.key466 = na
+loader.env.key467 = na
+loader.env.key468 = na
+loader.env.key469 = na
+loader.env.key470 = na
+loader.env.key471 = na
+loader.env.key472 = na
+loader.env.key473 = na
+loader.env.key474 = na
+loader.env.key475 = na
+loader.env.key476 = na
+loader.env.key477 = na
+loader.env.key478 = na
+loader.env.key479 = na
+loader.env.key480 = na
+loader.env.key481 = na
+loader.env.key482 = na
+loader.env.key483 = na
+loader.env.key484 = na
+loader.env.key485 = na
+loader.env.key486 = na
+loader.env.key487 = na
+loader.env.key488 = na
+loader.env.key489 = na
+loader.env.key490 = na
+loader.env.key491 = na
+loader.env.key492 = na
+loader.env.key493 = na
+loader.env.key494 = na
+loader.env.key495 = na
+loader.env.key496 = na
+loader.env.key497 = na
+loader.env.key498 = na
+loader.env.key499 = na
+loader.env.key500 = na
+loader.env.key501 = na
+loader.env.key502 = na
+loader.env.key503 = na
+loader.env.key504 = na
+loader.env.key505 = na
+loader.env.key506 = na
+loader.env.key507 = na
+loader.env.key508 = na
+loader.env.key509 = na
+loader.env.key510 = na
+loader.env.key511 = na
+loader.env.key512 = na
+loader.env.key513 = na
+loader.env.key514 = na
+loader.env.key515 = na
+loader.env.key516 = na
+loader.env.key517 = na
+loader.env.key518 = na
+loader.env.key519 = na
+loader.env.key520 = na
+loader.env.key521 = na
+loader.env.key522 = na
+loader.env.key523 = na
+loader.env.key524 = na
+loader.env.key525 = na
+loader.env.key526 = na
+loader.env.key527 = na
+loader.env.key528 = na
+loader.env.key529 = na
+loader.env.key530 = na
+loader.env.key531 = na
+loader.env.key532 = na
+loader.env.key533 = na
+loader.env.key534 = na
+loader.env.key535 = na
+loader.env.key536 = na
+loader.env.key537 = na
+loader.env.key538 = na
+loader.env.key539 = na
+loader.env.key540 = na
+loader.env.key541 = na
+loader.env.key542 = na
+loader.env.key543 = na
+loader.env.key544 = na
+loader.env.key545 = na
+loader.env.key546 = na
+loader.env.key547 = na
+loader.env.key548 = na
+loader.env.key549 = na
+loader.env.key550 = na
+loader.env.key551 = na
+loader.env.key552 = na
+loader.env.key553 = na
+loader.env.key554 = na
+loader.env.key555 = na
+loader.env.key556 = na
+loader.env.key557 = na
+loader.env.key558 = na
+loader.env.key559 = na
+loader.env.key560 = na
+loader.env.key561 = na
+loader.env.key562 = na
+loader.env.key563 = na
+loader.env.key564 = na
+loader.env.key565 = na
+loader.env.key566 = na
+loader.env.key567 = na
+loader.env.key568 = na
+loader.env.key569 = na
+loader.env.key570 = na
+loader.env.key571 = na
+loader.env.key572 = na
+loader.env.key573 = na
+loader.env.key574 = na
+loader.env.key575 = na
+loader.env.key576 = na
+loader.env.key577 = na
+loader.env.key578 = na
+loader.env.key579 = na
+loader.env.key580 = na
+loader.env.key581 = na
+loader.env.key582 = na
+loader.env.key583 = na
+loader.env.key584 = na
+loader.env.key585 = na
+loader.env.key586 = na
+loader.env.key587 = na
+loader.env.key588 = na
+loader.env.key589 = na
+loader.env.key590 = na
+loader.env.key591 = na
+loader.env.key592 = na
+loader.env.key593 = na
+loader.env.key594 = na
+loader.env.key595 = na
+loader.env.key596 = na
+loader.env.key597 = na
+loader.env.key598 = na
+loader.env.key599 = na
+loader.env.key600 = na
+loader.env.key601 = na
+loader.env.key602 = na
+loader.env.key603 = na
+loader.env.key604 = na
+loader.env.key605 = na
+loader.env.key606 = na
+loader.env.key607 = na
+loader.env.key608 = na
+loader.env.key609 = na
+loader.env.key610 = na
+loader.env.key611 = na
+loader.env.key612 = na
+loader.env.key613 = na
+loader.env.key614 = na
+loader.env.key615 = na
+loader.env.key616 = na
+loader.env.key617 = na
+loader.env.key618 = na
+loader.env.key619 = na
+loader.env.key620 = na
+loader.env.key621 = na
+loader.env.key622 = na
+loader.env.key623 = na
+loader.env.key624 = na
+loader.env.key625 = na
+loader.env.key626 = na
+loader.env.key627 = na
+loader.env.key628 = na
+loader.env.key629 = na
+loader.env.key630 = na
+loader.env.key631 = na
+loader.env.key632 = na
+loader.env.key633 = na
+loader.env.key634 = na
+loader.env.key635 = na
+loader.env.key636 = na
+loader.env.key637 = na
+loader.env.key638 = na
+loader.env.key639 = na
+loader.env.key640 = na
+loader.env.key641 = na
+loader.env.key642 = na
+loader.env.key643 = na
+loader.env.key644 = na
+loader.env.key645 = na
+loader.env.key646 = na
+loader.env.key647 = na
+loader.env.key648 = na
+loader.env.key649 = na
+loader.env.key650 = na
+loader.env.key651 = na
+loader.env.key652 = na
+loader.env.key653 = na
+loader.env.key654 = na
+loader.env.key655 = na
+loader.env.key656 = na
+loader.env.key657 = na
+loader.env.key658 = na
+loader.env.key659 = na
+loader.env.key660 = na
+loader.env.key661 = na
+loader.env.key662 = na
+loader.env.key663 = na
+loader.env.key664 = na
+loader.env.key665 = na
+loader.env.key666 = na
+loader.env.key667 = na
+loader.env.key668 = na
+loader.env.key669 = na
+loader.env.key670 = na
+loader.env.key671 = na
+loader.env.key672 = na
+loader.env.key673 = na
+loader.env.key674 = na
+loader.env.key675 = na
+loader.env.key676 = na
+loader.env.key677 = na
+loader.env.key678 = na
+loader.env.key679 = na
+loader.env.key680 = na
+loader.env.key681 = na
+loader.env.key682 = na
+loader.env.key683 = na
+loader.env.key684 = na
+loader.env.key685 = na
+loader.env.key686 = na
+loader.env.key687 = na
+loader.env.key688 = na
+loader.env.key689 = na
+loader.env.key690 = na
+loader.env.key691 = na
+loader.env.key692 = na
+loader.env.key693 = na
+loader.env.key694 = na
+loader.env.key695 = na
+loader.env.key696 = na
+loader.env.key697 = na
+loader.env.key698 = na
+loader.env.key699 = na
+loader.env.key700 = na
+loader.env.key701 = na
+loader.env.key702 = na
+loader.env.key703 = na
+loader.env.key704 = na
+loader.env.key705 = na
+loader.env.key706 = na
+loader.env.key707 = na
+loader.env.key708 = na
+loader.env.key709 = na
+loader.env.key710 = na
+loader.env.key711 = na
+loader.env.key712 = na
+loader.env.key713 = na
+loader.env.key714 = na
+loader.env.key715 = na
+loader.env.key716 = na
+loader.env.key717 = na
+loader.env.key718 = na
+loader.env.key719 = na
+loader.env.key720 = na
+loader.env.key721 = na
+loader.env.key722 = na
+loader.env.key723 = na
+loader.env.key724 = na
+loader.env.key725 = na
+loader.env.key726 = na
+loader.env.key727 = na
+loader.env.key728 = na
+loader.env.key729 = na
+loader.env.key730 = na
+loader.env.key731 = na
+loader.env.key732 = na
+loader.env.key733 = na
+loader.env.key734 = na
+loader.env.key735 = na
+loader.env.key736 = na
+loader.env.key737 = na
+loader.env.key738 = na
+loader.env.key739 = na
+loader.env.key740 = na
+loader.env.key741 = na
+loader.env.key742 = na
+loader.env.key743 = na
+loader.env.key744 = na
+loader.env.key745 = na
+loader.env.key746 = na
+loader.env.key747 = na
+loader.env.key748 = na
+loader.env.key749 = na
+loader.env.key750 = na
+loader.env.key751 = na
+loader.env.key752 = na
+loader.env.key753 = na
+loader.env.key754 = na
+loader.env.key755 = na
+loader.env.key756 = na
+loader.env.key757 = na
+loader.env.key758 = na
+loader.env.key759 = na
+loader.env.key760 = na
+loader.env.key761 = na
+loader.env.key762 = na
+loader.env.key763 = na
+loader.env.key764 = na
+loader.env.key765 = na
+loader.env.key766 = na
+loader.env.key767 = na
+loader.env.key768 = na
+loader.env.key769 = na
+loader.env.key770 = na
+loader.env.key771 = na
+loader.env.key772 = na
+loader.env.key773 = na
+loader.env.key774 = na
+loader.env.key775 = na
+loader.env.key776 = na
+loader.env.key777 = na
+loader.env.key778 = na
+loader.env.key779 = na
+loader.env.key780 = na
+loader.env.key781 = na
+loader.env.key782 = na
+loader.env.key783 = na
+loader.env.key784 = na
+loader.env.key785 = na
+loader.env.key786 = na
+loader.env.key787 = na
+loader.env.key788 = na
+loader.env.key789 = na
+loader.env.key790 = na
+loader.env.key791 = na
+loader.env.key792 = na
+loader.env.key793 = na
+loader.env.key794 = na
+loader.env.key795 = na
+loader.env.key796 = na
+loader.env.key797 = na
+loader.env.key798 = na
+loader.env.key799 = na
+loader.env.key800 = na
+loader.env.key801 = na
+loader.env.key802 = na
+loader.env.key803 = na
+loader.env.key804 = na
+loader.env.key805 = na
+loader.env.key806 = na
+loader.env.key807 = na
+loader.env.key808 = na
+loader.env.key809 = na
+loader.env.key810 = na
+loader.env.key811 = na
+loader.env.key812 = na
+loader.env.key813 = na
+loader.env.key814 = na
+loader.env.key815 = na
+loader.env.key816 = na
+loader.env.key817 = na
+loader.env.key818 = na
+loader.env.key819 = na
+loader.env.key820 = na
+loader.env.key821 = na
+loader.env.key822 = na
+loader.env.key823 = na
+loader.env.key824 = na
+loader.env.key825 = na
+loader.env.key826 = na
+loader.env.key827 = na
+loader.env.key828 = na
+loader.env.key829 = na
+loader.env.key830 = na
+loader.env.key831 = na
+loader.env.key832 = na
+loader.env.key833 = na
+loader.env.key834 = na
+loader.env.key835 = na
+loader.env.key836 = na
+loader.env.key837 = na
+loader.env.key838 = na
+loader.env.key839 = na
+loader.env.key840 = na
+loader.env.key841 = na
+loader.env.key842 = na
+loader.env.key843 = na
+loader.env.key844 = na
+loader.env.key845 = na
+loader.env.key846 = na
+loader.env.key847 = na
+loader.env.key848 = na
+loader.env.key849 = na
+loader.env.key850 = na
+loader.env.key851 = na
+loader.env.key852 = na
+loader.env.key853 = na
+loader.env.key854 = na
+loader.env.key855 = na
+loader.env.key856 = na
+loader.env.key857 = na
+loader.env.key858 = na
+loader.env.key859 = na
+loader.env.key860 = na
+loader.env.key861 = na
+loader.env.key862 = na
+loader.env.key863 = na
+loader.env.key864 = na
+loader.env.key865 = na
+loader.env.key866 = na
+loader.env.key867 = na
+loader.env.key868 = na
+loader.env.key869 = na
+loader.env.key870 = na
+loader.env.key871 = na
+loader.env.key872 = na
+loader.env.key873 = na
+loader.env.key874 = na
+loader.env.key875 = na
+loader.env.key876 = na
+loader.env.key877 = na
+loader.env.key878 = na
+loader.env.key879 = na
+loader.env.key880 = na
+loader.env.key881 = na
+loader.env.key882 = na
+loader.env.key883 = na
+loader.env.key884 = na
+loader.env.key885 = na
+loader.env.key886 = na
+loader.env.key887 = na
+loader.env.key888 = na
+loader.env.key889 = na
+loader.env.key890 = na
+loader.env.key891 = na
+loader.env.key892 = na
+loader.env.key893 = na
+loader.env.key894 = na
+loader.env.key895 = na
+loader.env.key896 = na
+loader.env.key897 = na
+loader.env.key898 = na
+loader.env.key899 = na
+loader.env.key900 = na
+loader.env.key901 = na
+loader.env.key902 = na
+loader.env.key903 = na
+loader.env.key904 = na
+loader.env.key905 = na
+loader.env.key906 = na
+loader.env.key907 = na
+loader.env.key908 = na
+loader.env.key909 = na
+loader.env.key910 = na
+loader.env.key911 = na
+loader.env.key912 = na
+loader.env.key913 = na
+loader.env.key914 = na
+loader.env.key915 = na
+loader.env.key916 = na
+loader.env.key917 = na
+loader.env.key918 = na
+loader.env.key919 = na
+loader.env.key920 = na
+loader.env.key921 = na
+loader.env.key922 = na
+loader.env.key923 = na
+loader.env.key924 = na
+loader.env.key925 = na
+loader.env.key926 = na
+loader.env.key927 = na
+loader.env.key928 = na
+loader.env.key929 = na
+loader.env.key930 = na
+loader.env.key931 = na
+loader.env.key932 = na
+loader.env.key933 = na
+loader.env.key934 = na
+loader.env.key935 = na
+loader.env.key936 = na
+loader.env.key937 = na
+loader.env.key938 = na
+loader.env.key939 = na
+loader.env.key940 = na
+loader.env.key941 = na
+loader.env.key942 = na
+loader.env.key943 = na
+loader.env.key944 = na
+loader.env.key945 = na
+loader.env.key946 = na
+loader.env.key947 = na
+loader.env.key948 = na
+loader.env.key949 = na
+loader.env.key950 = na
+loader.env.key951 = na
+loader.env.key952 = na
+loader.env.key953 = na
+loader.env.key954 = na
+loader.env.key955 = na
+loader.env.key956 = na
+loader.env.key957 = na
+loader.env.key958 = na
+loader.env.key959 = na
+loader.env.key960 = na
+loader.env.key961 = na
+loader.env.key962 = na
+loader.env.key963 = na
+loader.env.key964 = na
+loader.env.key965 = na
+loader.env.key966 = na
+loader.env.key967 = na
+loader.env.key968 = na
+loader.env.key969 = na
+loader.env.key970 = na
+loader.env.key971 = na
+loader.env.key972 = na
+loader.env.key973 = na
+loader.env.key974 = na
+loader.env.key975 = na
+loader.env.key976 = na
+loader.env.key977 = na
+loader.env.key978 = na
+loader.env.key979 = na
+loader.env.key980 = na
+loader.env.key981 = na
+loader.env.key982 = na
+loader.env.key983 = na
+loader.env.key984 = na
+loader.env.key985 = na
+loader.env.key986 = na
+loader.env.key987 = na
+loader.env.key988 = na
+loader.env.key989 = na
+loader.env.key990 = na
+loader.env.key991 = na
+loader.env.key992 = na
+loader.env.key993 = na
+loader.env.key994 = na
+loader.env.key995 = na
+loader.env.key996 = na
+loader.env.key997 = na
+loader.env.key998 = na
+loader.env.key999 = na
+loader.env.key1000 = na

+ 1 - 1
Pal/regression/Makefile

@@ -88,4 +88,4 @@ regression: $(call expand_target,$(target))
 	@printf "\n\n"
 
 clean:
-	rm -rf $(call expand_target,$(target)) $(preloads) *.tmp .lib *.cached
+	rm -rf $(call expand_target,$(target)) $(preloads) *.tmp .lib *.cached *.sig

+ 13 - 5
Pal/src/db_main.c

@@ -85,7 +85,7 @@ static void load_libraries (void)
 static void read_environments (const char *** envpp)
 {
     const char ** envp = *envpp;
-    char cfgbuf[CONFIG_MAX];
+    char * cfgbuf;
 
     /* loader.env.*: rewriting host environment variables */
     struct setenv {
@@ -94,12 +94,18 @@ static void read_environments (const char *** envpp)
     } * setenvs = NULL;
     int nsetenvs = 0;
 
-    if (pal_state.root_config)
-        nsetenvs = get_config_entries(pal_state.root_config, "loader.env",
-                                      cfgbuf, CONFIG_MAX);
+    if (!pal_state.root_config)
+        return;
+
+    cfgbuf = malloc(get_config_entries_size(pal_state.root_config,
+                                            "loader.env"));
+    nsetenvs = get_config_entries(pal_state.root_config, "loader.env",
+                                  cfgbuf);
 
-    if (nsetenvs <= 0)
+    if (nsetenvs <= 0) {
+        free(cfgbuf);
         return;
+    }
 
     setenvs = __alloca(sizeof(struct setenv) * nsetenvs);
     char * cfg = cfgbuf;
@@ -134,6 +140,8 @@ static void read_environments (const char *** envpp)
     char key[CONFIG_MAX] = "loader.env.";
     int prefix_len = static_strlen("loader.env.");
     const char ** ptr;
+    free(cfgbuf);
+    cfgbuf = __alloca(sizeof(char) * CONFIG_MAX);
 
     for (int i = 0 ; i < nsetenvs ; i++) {
         const char * str = setenvs[i].str;

+ 32 - 12
Pal/src/host/Linux-SGX/enclave_framework.c

@@ -433,15 +433,16 @@ static int init_trusted_file (const char * key, const char * uri)
 
 int init_trusted_files (void)
 {
-    char cfgbuf[CONFIG_MAX];
+    char *cfgbuf;
     int ret;
 
     if (pal_sec.exec_fd != PAL_IDX_POISON) {
         ret = init_trusted_file("exec", pal_sec.exec_name);
         if (ret < 0)
-            return ret;
+            goto out;
     }
 
+    cfgbuf = __alloca(CONFIG_MAX);
     int len = get_config(pal_state.root_config, "loader.preload",
                          cfgbuf, CONFIG_MAX);
     if (len) {
@@ -459,14 +460,19 @@ int init_trusted_files (void)
 
                 ret = init_trusted_file(key, uri);
                 if (ret < 0)
-                    return ret;
+                    goto out;
             }
         }
     }
 
+    cfgbuf = __alloca(get_config_entries_size(pal_state.root_config,
+                                              "sgx.trusted_files"));
     int nuris = get_config_entries(pal_state.root_config, "sgx.trusted_files",
-                                   cfgbuf, CONFIG_MAX);
-    if (nuris) {
+                                   cfgbuf);
+    if (nuris == -PAL_ERROR_INVAL)
+        nuris = 0;
+
+    if (nuris >= 0) {
         char key[CONFIG_MAX], uri[CONFIG_MAX];
         char * k = cfgbuf, * tmp;
 
@@ -480,14 +486,22 @@ int init_trusted_files (void)
             if (len > 0) {
                 ret = init_trusted_file(key + 18, uri);
                 if (ret < 0)
-                    return ret;
+                    goto out;
             }
         }
+    } else {
+        ret = nuris;
+        goto out;
     }
 
+    cfgbuf = __alloca(get_config_entries_size(pal_state.root_config,
+                                              "sgx.allowed_files"));
     nuris = get_config_entries(pal_state.root_config, "sgx.allowed_files",
-                               cfgbuf, CONFIG_MAX);
-    if (nuris > 0) {
+                               cfgbuf);
+    if (nuris == -PAL_ERROR_INVAL)
+        nuris = 0;
+
+    if (nuris >= 0) {
         char key[CONFIG_MAX], uri[CONFIG_MAX];
         char * k = cfgbuf, * tmp;
 
@@ -501,23 +515,29 @@ int init_trusted_files (void)
             if (len > 0)
                 register_trusted_file(uri, NULL);
         }
+    } else {
+        ret = nuris;
+        goto out;
     }
+    ret = 0;
 
-    
-    return 0;
+out:
+    return ret;
 }
 
 int init_trusted_children (void)
 {
-    char cfgbuf[CONFIG_MAX];
+    char *cfgbuf;
     char key[CONFIG_MAX], mrkey[CONFIG_MAX];
     char uri[CONFIG_MAX], mrenclave[CONFIG_MAX];
 
     char * tmp1 = strcpy_static(key, "sgx.trusted_children.", CONFIG_MAX);
     char * tmp2 = strcpy_static(mrkey, "sgx.trusted_mrenclave.", CONFIG_MAX);
 
+    cfgbuf = __alloca(get_config_entries_size(pal_state.root_config,
+                                              "sgx.trusted_mrenclave"));
     int nuris = get_config_entries(pal_state.root_config,
-                                   "sgx.trusted_mrenclave", cfgbuf, CONFIG_MAX);
+                                   "sgx.trusted_mrenclave", cfgbuf);
     if (nuris > 0) {
         char * k = cfgbuf;
         for (int i = 0 ; i < nuris ; i++) {

+ 8 - 8
Pal/src/security/Linux/manifest.c

@@ -103,11 +103,11 @@ next:
 
 int get_fs_paths (struct config_store * config, const char *** paths)
 {
-    char keys[CONFIG_MAX];
+    char *keys;
     int nkeys;
 
-    if ((nkeys = get_config_entries(config, "fs.mount", keys,
-                                    CONFIG_MAX)) < 0)
+    keys = __alloca(get_config_entries_size(config, "fs.mount"));
+    if ((nkeys = get_config_entries(config, "fs.mount", keys)) < 0)
         nkeys = 0;
 
     *paths = malloc(sizeof(const char *) * (1 + nkeys));
@@ -144,16 +144,16 @@ int get_net_rules (struct config_store * config,
                    struct graphene_net_rule ** net_rules,
                    int * nbind_rules)
 {
-    char binds[CONFIG_MAX], peers[CONFIG_MAX];
+    char *binds, *peers;
     int nbinds, npeers;
     int nrules = 0;
 
-    if ((nbinds = get_config_entries(config, "net.allow_bind", binds,
-                                     CONFIG_MAX)) < 0)
+    binds = __alloca(get_config_entries_size(config, "net.allow_bind"));
+    if ((nbinds = get_config_entries(config, "net.allow_bind", binds)) < 0)
         return 0;
 
-    if ((npeers = get_config_entries(config, "net.allow_peer", peers,
-                                     CONFIG_MAX)) < 0)
+    peers = __alloca(get_config_entries_size(config, "net.allow_peer"));
+    if ((npeers = get_config_entries(config, "net.allow_peer", peers)) < 0)
         return 0;
 
     struct graphene_net_rule * rules =