From dfd5134090dd80957dce5a65b467aafaff47ca3b Mon Sep 17 00:00:00 2001
From: Justus Winter <justus@gnupg.org>
Date: Tue, 1 Nov 2016 12:29:25 +0100
Subject: boot: Use the smallest possible name when inserting rights.

* boot/userland-boot.c (boot_script_insert_right): Use the smallest
possible name instead of the local name.
---
 boot/userland-boot.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

(limited to 'boot')

diff --git a/boot/userland-boot.c b/boot/userland-boot.c
index d048c00e..7b856147 100644
--- a/boot/userland-boot.c
+++ b/boot/userland-boot.c
@@ -90,14 +90,23 @@ boot_script_free_task (task_t task, int aborting)
 int
 boot_script_insert_right (struct cmd *cmd, mach_port_t port, mach_port_t *name)
 {
-  error_t err = mach_port_insert_right (cmd->task,
-					port, port, MACH_MSG_TYPE_COPY_SEND);
+  error_t err;
+
+  *name = MACH_PORT_NULL;
+  do
+    {
+      *name += 1;
+      err = mach_port_insert_right (cmd->task,
+                                    *name, port, MACH_MSG_TYPE_COPY_SEND);
+    }
+  while (err == KERN_NAME_EXISTS);
+
   if (err)
     {
       error (0, err, "%s: mach_port_insert_right", cmd->path);
       return BOOT_SCRIPT_MACH_ERROR;
     }
-  *name = port;
+
   return 0;
 }
 
-- 
cgit v1.2.3