• A
    generic kernel_execve() · 282124d1
    Al Viro 提交于
    based mostly on arm and alpha versions.  Architectures can define
    __ARCH_WANT_KERNEL_EXECVE and use it, provided that
    	* they have working current_pt_regs(), even for kernel threads.
    	* kernel_thread-spawned threads do have space for pt_regs
    in the normal location.  Normally that's as simple as switching to
    generic kernel_thread() and making sure that kernel threads do *not*
    go through return from syscall path; call the payload from equivalent
    of ret_from_fork if we are in a kernel thread (or just have separate
    ret_from_kernel_thread and make copy_thread() use it instead of
    ret_from_fork in kernel thread case).
    	* they have ret_from_kernel_execve(); it is called after
    successful do_execve() done by kernel_execve() and gets normal
    pt_regs location passed to it as argument.  It's essentially
    a longjmp() analog - it should set sp, etc. to the situation
    expected at the return for syscall and go there.  Eventually
    the need for that sucker will disappear, but that'll take some
    surgery on kernel_thread() payloads.
    Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
    282124d1
exec.c 54.0 KB