struct rlimit *rlim, *initrlim;
        struct itimerval itimer;
        struct bprm_security_struct *bsec;
+       struct sighand_struct *psig;
        int rc, i;
+       unsigned long flags;
 
        tsec = current->security;
        bsec = bprm->security;
 
        /* Wake up the parent if it is waiting so that it can
           recheck wait permission to the new task SID. */
+       read_lock_irq(&tasklist_lock);
+       psig = current->parent->sighand;
+       spin_lock_irqsave(&psig->siglock, flags);
        wake_up_interruptible(¤t->parent->signal->wait_chldexit);
+       spin_unlock_irqrestore(&psig->siglock, flags);
+       read_unlock_irq(&tasklist_lock);
 }
 
 /* superblock security operations */