Author: markj
Date: Mon Aug 17 21:30:49 2020
New Revision: 364329
URL: https://svnweb.freebsd.org/changeset/base/364329

Log:
  Remove "emulation" of clone(CLONE_PARENT | CLONE_THREAD).
  
  On Linux this is supposed to result in EINVAL.
  
  Reported by:  syzkaller
  MFC after:    1 week
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/compat/linux/linux_fork.c

Modified: head/sys/compat/linux/linux_fork.c
==============================================================================
--- head/sys/compat/linux/linux_fork.c  Mon Aug 17 21:30:15 2020        
(r364328)
+++ head/sys/compat/linux/linux_fork.c  Mon Aug 17 21:30:49 2020        
(r364329)
@@ -244,6 +244,8 @@ linux_clone_thread(struct thread *td, struct linux_clo
            td->td_tid, (unsigned)args->flags,
            args->parent_tidptr, args->child_tidptr);
 
+       if ((args->flags & LINUX_CLONE_PARENT) != 0)
+               return (EINVAL);
        if (args->flags & LINUX_CLONE_PARENT_SETTID)
                if (args->parent_tidptr == NULL)
                        return (EINVAL);
@@ -304,12 +306,8 @@ linux_clone_thread(struct thread *td, struct linux_clo
 
        PROC_LOCK(p);
        p->p_flag |= P_HADTHREADS;
+       thread_link(newtd, p);
        bcopy(p->p_comm, newtd->td_name, sizeof(newtd->td_name));
-
-       if (args->flags & LINUX_CLONE_PARENT)
-               thread_link(newtd, p->p_pptr);
-       else
-               thread_link(newtd, p);
 
        thread_lock(td);
        /* let the scheduler know about these things. */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to