From 54e90826a931e30cb9468a8a9968155989a99f74 Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Tue, 23 Aug 2022 12:34:02 +0200
Subject: file_exec: Homogeneize adding the gratuitous send right

---
 trans/fakeroot.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

(limited to 'trans')

diff --git a/trans/fakeroot.c b/trans/fakeroot.c
index e70cb280..df8d27d5 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -939,13 +939,13 @@ netfs_S_file_exec_paths (struct protid *user,
 			      file, MACH_PORT_RIGHT_SEND, 1);
   pthread_mutex_unlock (&user->po->np->lock);
 
-  /* Add a gratuitous send right on the protid to avoid a no-sender, and thus
-     interrupt the exec, just because we are precisely replacing the calling
-     process!  */
-  mach_port_t gratuitous = ports_get_send_right (user);
-
   if (!err)
     {
+      /* Add a gratuitous send right on the protid to avoid a no-sender, and thus
+	 interrupt the exec, just because we are precisely replacing the calling
+	 process!  */
+      mach_port_t gratuitous = ports_get_send_right (user);
+
 #ifdef HAVE_FILE_EXEC_PATHS
       /* We cannot use MACH_MSG_TYPE_MOVE_SEND because we might need to
 	 retry an interrupted call that would have consumed the rights.  */
@@ -971,6 +971,7 @@ netfs_S_file_exec_paths (struct protid *user,
 			 destroynames, destroynameslen);
 
       mach_port_deallocate (mach_task_self (), file);
+      mach_port_deallocate (mach_task_self (), gratuitous);
     }
 
   if (err == 0)
@@ -983,8 +984,6 @@ netfs_S_file_exec_paths (struct protid *user,
 	mach_port_deallocate (mach_task_self (), portarray[i]);
     }
 
-  mach_port_deallocate (mach_task_self (), gratuitous);
-
   return err;
 }
 
-- 
cgit v1.2.3