return ERR_PTR(-EINVAL);
/*
- * Thread groups must share signals as well:
+ * Thread groups must share signals as well, and detached threads
+ * can only be started up within the thread group.
*/
- if (clone_flags & CLONE_THREAD)
- clone_flags |= CLONE_SIGHAND;
- /*
- * Detached threads can only be started up within the thread
- * group.
- */
- if (clone_flags & CLONE_DETACHED)
- clone_flags |= CLONE_THREAD;
+ if ((clone_flags & CLONE_THREAD) && !(clone_flags & CLONE_SIGHAND))
+ return ERR_PTR(-EINVAL);
+ if ((clone_flags & CLONE_DETACHED) && !(clone_flags & CLONE_THREAD))
+ return ERR_PTR(-EINVAL);
retval = security_ops->task_create(clone_flags);
if (retval)