Commit af0622f6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull clone3/pidfd fixes from Christian Brauner:
 "This contains a couple of fixes:

   - Fix pidfd selftest compilation (Shuah Kahn)

     Due to a false linking instruction in the Makefile compilation for
     the pidfd selftests would fail on some systems.

   - Fix compilation for glibc on RISC-V systems (Seth Forshee)

     In some scenarios linux/uapi/linux/sched.h is included where
     __ASSEMBLY__ is defined causing a build failure because struct
     clone_args was not guarded by an #ifndef __ASSEMBLY__.

   - Add missing clone3() and struct clone_args kernel-doc (Christian Brauner)

     clone3() and struct clone_args were missing kernel-docs. (The goal
     is to use kernel-doc for any function or type where it's worth it.)
     For struct clone_args this also contains a comment about the fact
     that it's versioned by size"

* tag 'for-linus-20191003' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux:
  sched: add kernel-doc for struct clone_args
  fork: add kernel-doc for clone3
  selftests: pidfd: Fix undefined reference to pthread_create()
  sched: Add __ASSEMBLY__ guards around struct clone_args
parents 768b47b7 78f6face
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -33,8 +33,31 @@
#define CLONE_NEWNET		0x40000000	/* New network namespace */
#define CLONE_IO		0x80000000	/* Clone io context */

/*
 * Arguments for the clone3 syscall
#ifndef __ASSEMBLY__
/**
 * struct clone_args - arguments for the clone3 syscall
 * @flags:       Flags for the new process as listed above.
 *               All flags are valid except for CSIGNAL and
 *               CLONE_DETACHED.
 * @pidfd:       If CLONE_PIDFD is set, a pidfd will be
 *               returned in this argument.
 * @child_tid:   If CLONE_CHILD_SETTID is set, the TID of the
 *               child process will be returned in the child's
 *               memory.
 * @parent_tid:  If CLONE_PARENT_SETTID is set, the TID of
 *               the child process will be returned in the
 *               parent's memory.
 * @exit_signal: The exit_signal the parent process will be
 *               sent when the child exits.
 * @stack:       Specify the location of the stack for the
 *               child process.
 * @stack_size:  The size of the stack for the child process.
 * @tls:         If CLONE_SETTLS is set, the tls descriptor
 *               is set to tls.
 *
 * The structure is versioned by size and thus extensible.
 * New struct members must go at the end of the struct and
 * must be properly 64bit aligned.
 */
struct clone_args {
	__aligned_u64 flags;
@@ -46,6 +69,7 @@ struct clone_args {
	__aligned_u64 stack_size;
	__aligned_u64 tls;
};
#endif

/*
 * Scheduling policies
+11 −0
Original line number Diff line number Diff line
@@ -2604,6 +2604,17 @@ static bool clone3_args_valid(const struct kernel_clone_args *kargs)
	return true;
}

/**
 * clone3 - create a new process with specific properties
 * @uargs: argument structure
 * @size:  size of @uargs
 *
 * clone3() is the extensible successor to clone()/clone2().
 * It takes a struct as argument that is versioned by its size.
 *
 * Return: On success, a positive PID for the child process.
 *         On error, a negative errno number.
 */
SYSCALL_DEFINE2(clone3, struct clone_args __user *, uargs, size_t, size)
{
	int err;
+1 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
CFLAGS += -g -I../../../../usr/include/ -lpthread
CFLAGS += -g -I../../../../usr/include/ -pthread

TEST_GEN_PROGS := pidfd_test pidfd_open_test pidfd_poll_test pidfd_wait