summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2016-02-14 20:05:35 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-02-14 20:06:33 +0100
commit1b6cf043c4083c6a64706d67232363cf78f92975 (patch)
treed397aad7224249e0c61b12f2d133f8e269984092
parent6edf2d7cdecac6031e4ecfcc2b14ba5bed7c02a1 (diff)
Make sure to complete auth_server_authenticate
* boot/boot.c (S_io_reauthenticate): Keep calling auth_server_authenticate while it returns EINTR. * proc/mgt.c (S_proc_reauthenticate): Likewise.
-rw-r--r--boot/boot.c8
-rw-r--r--proc/mgt.c16
2 files changed, 15 insertions, 9 deletions
diff --git a/boot/boot.c b/boot/boot.c
index 4dda26b7..462243c3 100644
--- a/boot/boot.c
+++ b/boot/boot.c
@@ -1601,13 +1601,17 @@ S_io_reauthenticate (mach_port_t object,
MACH_MSG_TYPE_MAKE_SEND);
assert_perror (err);
- if (! auth_server_authenticate (authserver,
+ do
+ err = auth_server_authenticate (authserver,
rend, MACH_MSG_TYPE_COPY_SEND,
object, MACH_MSG_TYPE_COPY_SEND,
&gu, &gulen,
&au, &aulen,
&gg, &gglen,
- &ag, &aglen))
+ &ag, &aglen);
+ while (err == EINTR);
+
+ if (!err)
{
mig_deallocate ((vm_address_t) gu, gulen * sizeof *gu);
mig_deallocate ((vm_address_t) au, aulen * sizeof *gu);
diff --git a/proc/mgt.c b/proc/mgt.c
index dacce46e..128a1c8b 100644
--- a/proc/mgt.c
+++ b/proc/mgt.c
@@ -110,13 +110,15 @@ S_proc_reauthenticate (struct proc *p, mach_port_t rendport)
/* Release the global lock while blocking on the auth server and client. */
pthread_mutex_unlock (&global_lock);
- err = auth_server_authenticate (authserver,
- rendport, MACH_MSG_TYPE_COPY_SEND,
- MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND,
- &gen_uids, &ngen_uids,
- &aux_uids, &naux_uids,
- &gen_gids, &ngen_gids,
- &aux_gids, &naux_gids);
+ do
+ err = auth_server_authenticate (authserver,
+ rendport, MACH_MSG_TYPE_COPY_SEND,
+ MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND,
+ &gen_uids, &ngen_uids,
+ &aux_uids, &naux_uids,
+ &gen_gids, &ngen_gids,
+ &aux_gids, &naux_gids);
+ while (err == EINTR);
pthread_mutex_lock (&global_lock);
if (err)