about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2015-11-29 16:41:00 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2015-11-29 16:41:00 +0100
commit894f3e131176c481c50484e3004a7a641db01373 (patch)
tree4d51bbeeef485c3e13891c3c42b50fc5faeecc61
parentdb4855bf0c6fa25f0e3e62c60deb43ffe527b07c (diff)
downloadglibc-894f3e131176c481c50484e3004a7a641db01373.tar.gz
glibc-894f3e131176c481c50484e3004a7a641db01373.tar.xz
glibc-894f3e131176c481c50484e3004a7a641db01373.zip
hurd: install correct number of send rights on fork
	* sysdeps/mach/hurd/fork.c (__fork): Install correct number of send
	rights for its main user thread in NEWTASK.
-rw-r--r--ChangeLog5
-rw-r--r--sysdeps/mach/hurd/fork.c6
2 files changed, 6 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index d4dc8a447d..62beb762c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-29  Thomas Schwinge  <thomas@codesourcery.com>
+
+	* sysdeps/mach/hurd/fork.c (__fork): Install correct number of send
+	rights for its main user thread in NEWTASK.
+
 2015-11-28  Maciej W. Rozycki  <macro@imgtec.com>
 
 	* sysdeps/mips/fpu_control.h (_FPU_RESERVED): Include ABS2008.
diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c
index 04d81e1d1d..d4baed54c8 100644
--- a/sysdeps/mach/hurd/fork.c
+++ b/sysdeps/mach/hurd/fork.c
@@ -464,14 +464,10 @@ __fork (void)
 	  (err = __mach_port_insert_right (newtask, ss->thread,
 					   thread, MACH_MSG_TYPE_COPY_SEND)))
 	LOSE;
-      /* We have one extra user reference created at the beginning of this
-	 function, accounted for by mach_port_names (and which will thus be
-	 accounted for in the child below).  This extra right gets consumed
-	 in the child by the store into _hurd_sigthread in the child fork.  */
       if (thread_refs > 1 &&
 	  (err = __mach_port_mod_refs (newtask, ss->thread,
 				       MACH_PORT_RIGHT_SEND,
-				       thread_refs)))
+				       thread_refs - 1)))
 	LOSE;
       if ((_hurd_msgport_thread != MACH_PORT_NULL) /* Let user have none.  */
 	  && ((err = __mach_port_deallocate (newtask, _hurd_msgport_thread)) ||