ids falls back to authenticating with its own auth port when proc_pid2task 
fails. In that path, task was never initialized but was still passed to 
mach_port_deallocate after msg_get_init_port succeeded.

Initialize the task port and only deallocate it when it is valid.

Signed-off-by: Bradley Morgan <[email protected]>
---
 utils/ids.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/utils/ids.c b/utils/ids.c
index 94fe6793..58ba47f5 100644
--- a/utils/ids.c
+++ b/utils/ids.c
@@ -52,7 +52,7 @@ int
 main(int argc, char *argv[])
 {
   error_t err;
-  task_t task;
+  task_t task = MACH_PORT_NULL;
   mach_port_t msgport;
   int pid = -1;
   auth_t auth = getauth ();
@@ -147,7 +147,8 @@ main(int argc, char *argv[])
     error (6, err, "%d: Cannot get process authentication", pid);
 
   mach_port_deallocate (mach_task_self (), msgport);
-  mach_port_deallocate (mach_task_self (), task);
+  if (MACH_PORT_VALID (task))
+    mach_port_deallocate (mach_task_self (), task);
 
   /* Get the ids that AUTH represents.  */
   err = ugids_merge_auth (&ugids, auth);
-- 
2.53.0


Reply via email to