Close a race window in kse_create(): signal delivered after SIGPENDING call

but before we call kse_link().
This commit is contained in:
David Xu 2002-10-28 07:37:06 +00:00
parent 9a96729c64
commit 72465621ff
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=106075
2 changed files with 4 additions and 8 deletions

View File

@ -455,10 +455,6 @@ kse_create(struct thread *td, struct kse_create_args *uap)
bcopy(&ke->ke_startcopy, &newke->ke_startcopy,
RANGEOF(struct kse, ke_startcopy, ke_endcopy));
#endif
PROC_LOCK(p);
if (SIGPENDING(p))
newke->ke_flags |= KEF_ASTPENDING;
PROC_UNLOCK(p);
/* For the first call this may not have been set */
if (td->td_standin == NULL) {
td->td_standin = thread_alloc();
@ -469,6 +465,8 @@ kse_create(struct thread *td, struct kse_create_args *uap)
else
newkg = kg;
kse_link(newke, newkg);
if (p->p_sflag & PS_NEEDSIGCHK)
newke->ke_flags |= KEF_ASTPENDING;
newke->ke_mailbox = uap->mbx;
newke->ke_upcall = mbx.km_func;
bcopy(&mbx.km_stack, &newke->ke_stack, sizeof(stack_t));

View File

@ -455,10 +455,6 @@ kse_create(struct thread *td, struct kse_create_args *uap)
bcopy(&ke->ke_startcopy, &newke->ke_startcopy,
RANGEOF(struct kse, ke_startcopy, ke_endcopy));
#endif
PROC_LOCK(p);
if (SIGPENDING(p))
newke->ke_flags |= KEF_ASTPENDING;
PROC_UNLOCK(p);
/* For the first call this may not have been set */
if (td->td_standin == NULL) {
td->td_standin = thread_alloc();
@ -469,6 +465,8 @@ kse_create(struct thread *td, struct kse_create_args *uap)
else
newkg = kg;
kse_link(newke, newkg);
if (p->p_sflag & PS_NEEDSIGCHK)
newke->ke_flags |= KEF_ASTPENDING;
newke->ke_mailbox = uap->mbx;
newke->ke_upcall = mbx.km_func;
bcopy(&mbx.km_stack, &newke->ke_stack, sizeof(stack_t));