summaryrefslogtreecommitdiff
path: root/trans/fakeroot.c
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2022-08-23 12:34:02 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2022-08-23 12:34:02 +0200
commit54e90826a931e30cb9468a8a9968155989a99f74 (patch)
tree552824cbe5d5b659f266c31fbabace02dc479c22 /trans/fakeroot.c
parent772e292c2d47e9d93455e3c87ae0209a58a3da67 (diff)
file_exec: Homogeneize adding the gratuitous send right
Diffstat (limited to 'trans/fakeroot.c')
-rw-r--r--trans/fakeroot.c13
1 files changed, 6 insertions, 7 deletions
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;
}