Re: [PATCH v2 1/7] mm: Add process_vm_mmap() syscall declaration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 20, 2019 at 05:00:07PM +0300, Kirill Tkhai wrote:
> Similar to process_vm_readv() and process_vm_writev(),
> add declarations of a new syscall, which will allow
> to map memory from or to another process.

Shouldn't this be the last patch in the series so that the syscall is actually
implemented first?

Ira

> 
> Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx>
> ---
>  arch/x86/entry/syscalls/syscall_32.tbl |    1 +
>  arch/x86/entry/syscalls/syscall_64.tbl |    2 ++
>  include/linux/syscalls.h               |    5 +++++
>  include/uapi/asm-generic/unistd.h      |    5 ++++-
>  init/Kconfig                           |    9 +++++----
>  kernel/sys_ni.c                        |    2 ++
>  6 files changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
> index ad968b7bac72..99d6e0085576 100644
> --- a/arch/x86/entry/syscalls/syscall_32.tbl
> +++ b/arch/x86/entry/syscalls/syscall_32.tbl
> @@ -438,3 +438,4 @@
>  431	i386	fsconfig		sys_fsconfig			__ia32_sys_fsconfig
>  432	i386	fsmount			sys_fsmount			__ia32_sys_fsmount
>  433	i386	fspick			sys_fspick			__ia32_sys_fspick
> +434	i386	process_vm_mmap		sys_process_vm_mmap		__ia32_compat_sys_process_vm_mmap
> diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
> index b4e6f9e6204a..46d7d2898f7a 100644
> --- a/arch/x86/entry/syscalls/syscall_64.tbl
> +++ b/arch/x86/entry/syscalls/syscall_64.tbl
> @@ -355,6 +355,7 @@
>  431	common	fsconfig		__x64_sys_fsconfig
>  432	common	fsmount			__x64_sys_fsmount
>  433	common	fspick			__x64_sys_fspick
> +434	common	process_vm_mmap		__x64_sys_process_vm_mmap
>  
>  #
>  # x32-specific system call numbers start at 512 to avoid cache impact
> @@ -398,3 +399,4 @@
>  545	x32	execveat		__x32_compat_sys_execveat/ptregs
>  546	x32	preadv2			__x32_compat_sys_preadv64v2
>  547	x32	pwritev2		__x32_compat_sys_pwritev64v2
> +548	x32	process_vm_mmap		__x32_compat_sys_process_vm_mmap
> diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
> index e2870fe1be5b..7d8ae36589cf 100644
> --- a/include/linux/syscalls.h
> +++ b/include/linux/syscalls.h
> @@ -997,6 +997,11 @@ asmlinkage long sys_fspick(int dfd, const char __user *path, unsigned int flags)
>  asmlinkage long sys_pidfd_send_signal(int pidfd, int sig,
>  				       siginfo_t __user *info,
>  				       unsigned int flags);
> +asmlinkage long sys_process_vm_mmap(pid_t pid,
> +				    unsigned long src_addr,
> +				    unsigned long len,
> +				    unsigned long dst_addr,
> +				    unsigned long flags);
>  
>  /*
>   * Architecture-specific system calls
> diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
> index a87904daf103..b7aaa5ae02da 100644
> --- a/include/uapi/asm-generic/unistd.h
> +++ b/include/uapi/asm-generic/unistd.h
> @@ -844,9 +844,12 @@ __SYSCALL(__NR_fsconfig, sys_fsconfig)
>  __SYSCALL(__NR_fsmount, sys_fsmount)
>  #define __NR_fspick 433
>  __SYSCALL(__NR_fspick, sys_fspick)
> +#define __NR_process_vm_mmap 424
> +__SC_COMP(__NR_process_vm_mmap, sys_process_vm_mmap, \
> +          compat_sys_process_vm_mmap)
>  
>  #undef __NR_syscalls
> -#define __NR_syscalls 434
> +#define __NR_syscalls 435
>  
>  /*
>   * 32 bit systems traditionally used different
> diff --git a/init/Kconfig b/init/Kconfig
> index 8b9ffe236e4f..604db5f14718 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -320,13 +320,14 @@ config POSIX_MQUEUE_SYSCTL
>  	default y
>  
>  config CROSS_MEMORY_ATTACH
> -	bool "Enable process_vm_readv/writev syscalls"
> +	bool "Enable process_vm_readv/writev/mmap syscalls"
>  	depends on MMU
>  	default y
>  	help
> -	  Enabling this option adds the system calls process_vm_readv and
> -	  process_vm_writev which allow a process with the correct privileges
> -	  to directly read from or write to another process' address space.
> +	  Enabling this option adds the system calls process_vm_readv,
> +	  process_vm_writev and process_vm_mmap, which allow a process
> +	  with the correct privileges to directly read from or write to
> +	  or mmap another process' address space.
>  	  See the man page for more details.
>  
>  config USELIB
> diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
> index 4d9ae5ea6caf..6f51634f4f7e 100644
> --- a/kernel/sys_ni.c
> +++ b/kernel/sys_ni.c
> @@ -316,6 +316,8 @@ COND_SYSCALL(process_vm_readv);
>  COND_SYSCALL_COMPAT(process_vm_readv);
>  COND_SYSCALL(process_vm_writev);
>  COND_SYSCALL_COMPAT(process_vm_writev);
> +COND_SYSCALL(process_vm_mmap);
> +COND_SYSCALL_COMPAT(process_vm_mmap);
>  
>  /* compare kernel pointers */
>  COND_SYSCALL(kcmp);
> 




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux