Close a race window in kse_create(): signal delivered after SIGPENDING call
but before we call kse_link().
This commit is contained in:
parent
9a96729c64
commit
72465621ff
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=106075
@ -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));
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user