All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Andrey Konovalov <andreyknvl@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	kvm@vger.kernel.org, Szabolcs Nagy <Szabolcs.Nagy@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	dri-devel@lists.freedesktop.org, linux-mm@kvack.org,
	Khalid Aziz <khalid.aziz@oracle.com>,
	linux-kselftest@vger.kernel.org,
	Felix Kuehling <Felix.Kuehling@amd.com>,
	Jacob Bramley <Jacob.Bramley@arm.com>,
	Leon Romanovsky <leon@kernel.org>,
	linux-rdma@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	Christoph Hellwig <hch@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Dmitry Vyukov <dvyukov@google.com>,
	Dave Martin <Dave.Martin@arm.com>,
	Evgeniy Stepanov <eugenis@google.com>,
	linux-media@vger.kernel.org,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Kees Cook <keescook@chromium.org>,
	Ruben Ayrapetyan <Ruben.Ayrapetyan@arm.com>
Subject: Re: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Tue, 11 Jun 2019 18:09:10 +0100	[thread overview]
Message-ID: <d3dc2b1f-e8c9-c60d-f648-0bc9b08f20e4@arm.com> (raw)
In-Reply-To: <20190611145720.GA63588@arrakis.emea.arm.com>

Hi Catalin,

...

> ---------8<----------------
> From 7c624777a4e545522dec1b34e60f0229cb2bd59f Mon Sep 17 00:00:00 2001
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Tue, 11 Jun 2019 13:03:38 +0100
> Subject: [PATCH] arm64: Introduce prctl() options to control the tagged user
>  addresses ABI
> 
> It is not desirable to relax the ABI to allow tagged user addresses into
> the kernel indiscriminately. This patch introduces a prctl() interface
> for enabling or disabling the tagged ABI with a global sysctl control
> for preventing applications from enabling the relaxed ABI (meant for
> testing user-space prctl() return error checking without reconfiguring
> the kernel). The ABI properties are inherited by threads of the same
> application and fork()'ed children but cleared on execve().
> 
> The PR_SET_TAGGED_ADDR_CTRL will be expanded in the future to handle
> MTE-specific settings like imprecise vs precise exceptions.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
>  arch/arm64/include/asm/processor.h   |  6 +++
>  arch/arm64/include/asm/thread_info.h |  1 +
>  arch/arm64/include/asm/uaccess.h     |  5 ++-
>  arch/arm64/kernel/process.c          | 67 ++++++++++++++++++++++++++++
>  include/uapi/linux/prctl.h           |  5 +++
>  kernel/sys.c                         | 16 +++++++
>  6 files changed, 99 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
> index fcd0e691b1ea..fee457456aa8 100644
> --- a/arch/arm64/include/asm/processor.h
> +++ b/arch/arm64/include/asm/processor.h
> @@ -307,6 +307,12 @@ extern void __init minsigstksz_setup(void);
>  /* PR_PAC_RESET_KEYS prctl */
>  #define PAC_RESET_KEYS(tsk, arg)	ptrauth_prctl_reset_keys(tsk, arg)
>  
> +/* PR_TAGGED_ADDR prctl */
> +long set_tagged_addr_ctrl(unsigned long arg);
> +long get_tagged_addr_ctrl(void);
> +#define SET_TAGGED_ADDR_CTRL(arg)	set_tagged_addr_ctrl(arg)
> +#define GET_TAGGED_ADDR_CTRL()		get_tagged_addr_ctrl()
> +
>  /*
>   * For CONFIG_GCC_PLUGIN_STACKLEAK
>   *
> diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
> index c285d1ce7186..7263d4c973ce 100644
> --- a/arch/arm64/include/asm/thread_info.h
> +++ b/arch/arm64/include/asm/thread_info.h
> @@ -101,6 +101,7 @@ void arch_release_task_struct(struct task_struct *tsk);
>  #define TIF_SVE			23	/* Scalable Vector Extension in use */
>  #define TIF_SVE_VL_INHERIT	24	/* Inherit sve_vl_onexec across exec */
>  #define TIF_SSBD		25	/* Wants SSB mitigation */
> +#define TIF_TAGGED_ADDR		26
>

Can you please put a comment here?

>  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
>  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
> diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
> index 9164ecb5feca..995b9ea11a89 100644
> --- a/arch/arm64/include/asm/uaccess.h
> +++ b/arch/arm64/include/asm/uaccess.h
> @@ -73,6 +73,9 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  {
>  	unsigned long ret, limit = current_thread_info()->addr_limit;
>  
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		addr = untagged_addr(addr);
> +
>  	__chk_user_ptr(addr);
>  	asm volatile(
>  	// A + B <= C + 1 for all A,B,C, in four easy steps:
> @@ -94,7 +97,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  	return ret;
>  }
>  
> -#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
> +#define access_ok(addr, size)	__range_ok(addr, size)
>  #define user_addr_max			get_fs
>>  #define _ASM_EXTABLE(from, to)						\
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 3767fb21a5b8..69d0be1fc708 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -30,6 +30,7 @@
>  #include <linux/kernel.h>
>  #include <linux/mm.h>
>  #include <linux/stddef.h>
> +#include <linux/sysctl.h>
>  #include <linux/unistd.h>
>  #include <linux/user.h>
>  #include <linux/delay.h>
> @@ -323,6 +324,7 @@ void flush_thread(void)
>  	fpsimd_flush_thread();
>  	tls_thread_flush();
>  	flush_ptrace_hw_breakpoint(current);
> +	clear_thread_flag(TIF_TAGGED_ADDR);

Nit: in line we the other functions in thread_flush we could have something like
"tagged_addr_thread_flush", maybe inlined.

>  }
>  
>  void release_thread(struct task_struct *dead_task)
> @@ -552,3 +554,68 @@ void arch_setup_new_exec(void)
>  
>  	ptrauth_thread_init_user(current);
>  }
> +
> +/*
> + * Control the relaxed ABI allowing tagged user addresses into the kernel.
> + */
> +static unsigned int tagged_addr_prctl_allowed = 1;
> +
> +long set_tagged_addr_ctrl(unsigned long arg)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +	if (arg & ~PR_TAGGED_ADDR_ENABLE)
> +		return -EINVAL;
> +
> +	if (arg & PR_TAGGED_ADDR_ENABLE)
> +		set_thread_flag(TIF_TAGGED_ADDR);
> +	else
> +		clear_thread_flag(TIF_TAGGED_ADDR);
> +
> +	return 0;
> +}
> +
> +long get_tagged_addr_ctrl(void)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		return PR_TAGGED_ADDR_ENABLE;
> +
> +	return 0;
> +}
> +
> +/*
> + * Global sysctl to disable the tagged user addresses support. This control
> + * only prevents the tagged address ABI enabling via prctl() and does not
> + * disable it for tasks that already opted in to the relaxed ABI.
> + */
> +static int zero;
> +static int one = 1;
> +
> +static struct ctl_table tagged_addr_sysctl_table[] = {
> +	{
> +		.procname	= "tagged_addr",
> +		.mode		= 0644,
> +		.data		= &tagged_addr_prctl_allowed,
> +		.maxlen		= sizeof(int),
> +		.proc_handler	= proc_dointvec_minmax,
> +		.extra1		= &zero,
> +		.extra2		= &one,
> +	},
> +	{ }
> +};
> +
> +static int __init tagged_addr_init(void)
> +{
> +	if (!register_sysctl("abi", tagged_addr_sysctl_table))
> +		return -EINVAL;
> +	return 0;
> +}
> +
> +core_initcall(tagged_addr_init);

process.c seems already a bit "overcrowded". Probably we could move all the
tagged_addr features in a separate file. What do you think? It would make easier
the implementation of mte as well going forward.

> diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
> index 094bb03b9cc2..2e927b3e9d6c 100644
> --- a/include/uapi/linux/prctl.h
> +++ b/include/uapi/linux/prctl.h
> @@ -229,4 +229,9 @@ struct prctl_mm_map {
>  # define PR_PAC_APDBKEY			(1UL << 3)
>  # define PR_PAC_APGAKEY			(1UL << 4)
>  
> +/* Tagged user address controls for arm64 */
> +#define PR_SET_TAGGED_ADDR_CTRL		55
> +#define PR_GET_TAGGED_ADDR_CTRL		56
> +# define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
> +
>  #endif /* _LINUX_PRCTL_H */
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 2969304c29fe..ec48396b4943 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -124,6 +124,12 @@
>  #ifndef PAC_RESET_KEYS
>  # define PAC_RESET_KEYS(a, b)	(-EINVAL)
>  #endif
> +#ifndef SET_TAGGED_ADDR_CTRL
> +# define SET_TAGGED_ADDR_CTRL(a)	(-EINVAL)
> +#endif
> +#ifndef GET_TAGGED_ADDR_CTRL
> +# define GET_TAGGED_ADDR_CTRL()		(-EINVAL)
> +#endif
>  
>  /*
>   * this is where the system-wide overflow UID and GID are defined, for
> @@ -2492,6 +2498,16 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>  			return -EINVAL;
>  		error = PAC_RESET_KEYS(me, arg2);
>  		break;
> +	case PR_SET_TAGGED_ADDR_CTRL:
> +		if (arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = SET_TAGGED_ADDR_CTRL(arg2);
> +		break;
> +	case PR_GET_TAGGED_ADDR_CTRL:
> +		if (arg2 || arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = GET_TAGGED_ADDR_CTRL();
> +		break;

Why do we need two prctl here? We could have only one and use arg2 as set/get
and arg3 as a parameter. What do you think?

>  	default:
>  		error = -EINVAL;
>  		break;
> 

-- 
Regards,
Vincenzo

WARNING: multiple messages have this Message-ID (diff)
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Andrey Konovalov <andreyknvl@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	kvm@vger.kernel.org, Szabolcs Nagy <Szabolcs.Nagy@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	dri-devel@lists.freedesktop.org, linux-mm@kvack.org,
	Khalid Aziz <khalid.aziz@oracle.com>,
	linux-kselftest@vger.kernel.org,
	Felix Kuehling <Felix.Kuehling@amd.com>,
	Jacob Bramley <Jacob.Bramley@arm.com>,
	Leon Romanovsky <leon@kernel.org>,
	linux-rdma@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	Christoph Hellwig <hch@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	Dmitry Vyukov <dvyukov@google.com>,
	Dave Martin <Dave.Martin@arm.com>,
	Evgeniy Stepanov <eugenis@google.com>,
	linux-media@vger.kernel.org,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Kees Cook <keescook@chromium.org>,
	Ruben Ayrapetyan <Ruben.Ayrapetyan@arm.com>,
	Ramana Radhakrishnan <Ramana.Radhakrishnan@arm.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	linux-arm-kernel@lists.infradead.org,
	Kostya Serebryany <kcc@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Yishai Hadas <yishaih@mellanox.com>,
	linux-kernel@vger.kernel.org,
	Jens Wiklander <jens.wiklander@linaro.org>,
	Lee Smith <Lee.Smith@arm.com>,
	Alexander Deucher <Alexander.Deucher@amd.com>,
	Andrew Morton <akpm@linux-foundation.org>, enh <enh@google.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Christian Koenig <Christian.Koenig@amd.com>,
	Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Subject: Re: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Tue, 11 Jun 2019 18:09:10 +0100	[thread overview]
Message-ID: <d3dc2b1f-e8c9-c60d-f648-0bc9b08f20e4@arm.com> (raw)
In-Reply-To: <20190611145720.GA63588@arrakis.emea.arm.com>

Hi Catalin,

...

> ---------8<----------------
> From 7c624777a4e545522dec1b34e60f0229cb2bd59f Mon Sep 17 00:00:00 2001
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Tue, 11 Jun 2019 13:03:38 +0100
> Subject: [PATCH] arm64: Introduce prctl() options to control the tagged user
>  addresses ABI
> 
> It is not desirable to relax the ABI to allow tagged user addresses into
> the kernel indiscriminately. This patch introduces a prctl() interface
> for enabling or disabling the tagged ABI with a global sysctl control
> for preventing applications from enabling the relaxed ABI (meant for
> testing user-space prctl() return error checking without reconfiguring
> the kernel). The ABI properties are inherited by threads of the same
> application and fork()'ed children but cleared on execve().
> 
> The PR_SET_TAGGED_ADDR_CTRL will be expanded in the future to handle
> MTE-specific settings like imprecise vs precise exceptions.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
>  arch/arm64/include/asm/processor.h   |  6 +++
>  arch/arm64/include/asm/thread_info.h |  1 +
>  arch/arm64/include/asm/uaccess.h     |  5 ++-
>  arch/arm64/kernel/process.c          | 67 ++++++++++++++++++++++++++++
>  include/uapi/linux/prctl.h           |  5 +++
>  kernel/sys.c                         | 16 +++++++
>  6 files changed, 99 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
> index fcd0e691b1ea..fee457456aa8 100644
> --- a/arch/arm64/include/asm/processor.h
> +++ b/arch/arm64/include/asm/processor.h
> @@ -307,6 +307,12 @@ extern void __init minsigstksz_setup(void);
>  /* PR_PAC_RESET_KEYS prctl */
>  #define PAC_RESET_KEYS(tsk, arg)	ptrauth_prctl_reset_keys(tsk, arg)
>  
> +/* PR_TAGGED_ADDR prctl */
> +long set_tagged_addr_ctrl(unsigned long arg);
> +long get_tagged_addr_ctrl(void);
> +#define SET_TAGGED_ADDR_CTRL(arg)	set_tagged_addr_ctrl(arg)
> +#define GET_TAGGED_ADDR_CTRL()		get_tagged_addr_ctrl()
> +
>  /*
>   * For CONFIG_GCC_PLUGIN_STACKLEAK
>   *
> diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
> index c285d1ce7186..7263d4c973ce 100644
> --- a/arch/arm64/include/asm/thread_info.h
> +++ b/arch/arm64/include/asm/thread_info.h
> @@ -101,6 +101,7 @@ void arch_release_task_struct(struct task_struct *tsk);
>  #define TIF_SVE			23	/* Scalable Vector Extension in use */
>  #define TIF_SVE_VL_INHERIT	24	/* Inherit sve_vl_onexec across exec */
>  #define TIF_SSBD		25	/* Wants SSB mitigation */
> +#define TIF_TAGGED_ADDR		26
>

Can you please put a comment here?

>  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
>  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
> diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
> index 9164ecb5feca..995b9ea11a89 100644
> --- a/arch/arm64/include/asm/uaccess.h
> +++ b/arch/arm64/include/asm/uaccess.h
> @@ -73,6 +73,9 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  {
>  	unsigned long ret, limit = current_thread_info()->addr_limit;
>  
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		addr = untagged_addr(addr);
> +
>  	__chk_user_ptr(addr);
>  	asm volatile(
>  	// A + B <= C + 1 for all A,B,C, in four easy steps:
> @@ -94,7 +97,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  	return ret;
>  }
>  
> -#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
> +#define access_ok(addr, size)	__range_ok(addr, size)
>  #define user_addr_max			get_fs
>>  #define _ASM_EXTABLE(from, to)						\
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 3767fb21a5b8..69d0be1fc708 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -30,6 +30,7 @@
>  #include <linux/kernel.h>
>  #include <linux/mm.h>
>  #include <linux/stddef.h>
> +#include <linux/sysctl.h>
>  #include <linux/unistd.h>
>  #include <linux/user.h>
>  #include <linux/delay.h>
> @@ -323,6 +324,7 @@ void flush_thread(void)
>  	fpsimd_flush_thread();
>  	tls_thread_flush();
>  	flush_ptrace_hw_breakpoint(current);
> +	clear_thread_flag(TIF_TAGGED_ADDR);

Nit: in line we the other functions in thread_flush we could have something like
"tagged_addr_thread_flush", maybe inlined.

>  }
>  
>  void release_thread(struct task_struct *dead_task)
> @@ -552,3 +554,68 @@ void arch_setup_new_exec(void)
>  
>  	ptrauth_thread_init_user(current);
>  }
> +
> +/*
> + * Control the relaxed ABI allowing tagged user addresses into the kernel.
> + */
> +static unsigned int tagged_addr_prctl_allowed = 1;
> +
> +long set_tagged_addr_ctrl(unsigned long arg)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +	if (arg & ~PR_TAGGED_ADDR_ENABLE)
> +		return -EINVAL;
> +
> +	if (arg & PR_TAGGED_ADDR_ENABLE)
> +		set_thread_flag(TIF_TAGGED_ADDR);
> +	else
> +		clear_thread_flag(TIF_TAGGED_ADDR);
> +
> +	return 0;
> +}
> +
> +long get_tagged_addr_ctrl(void)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		return PR_TAGGED_ADDR_ENABLE;
> +
> +	return 0;
> +}
> +
> +/*
> + * Global sysctl to disable the tagged user addresses support. This control
> + * only prevents the tagged address ABI enabling via prctl() and does not
> + * disable it for tasks that already opted in to the relaxed ABI.
> + */
> +static int zero;
> +static int one = 1;
> +
> +static struct ctl_table tagged_addr_sysctl_table[] = {
> +	{
> +		.procname	= "tagged_addr",
> +		.mode		= 0644,
> +		.data		= &tagged_addr_prctl_allowed,
> +		.maxlen		= sizeof(int),
> +		.proc_handler	= proc_dointvec_minmax,
> +		.extra1		= &zero,
> +		.extra2		= &one,
> +	},
> +	{ }
> +};
> +
> +static int __init tagged_addr_init(void)
> +{
> +	if (!register_sysctl("abi", tagged_addr_sysctl_table))
> +		return -EINVAL;
> +	return 0;
> +}
> +
> +core_initcall(tagged_addr_init);

process.c seems already a bit "overcrowded". Probably we could move all the
tagged_addr features in a separate file. What do you think? It would make easier
the implementation of mte as well going forward.

> diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
> index 094bb03b9cc2..2e927b3e9d6c 100644
> --- a/include/uapi/linux/prctl.h
> +++ b/include/uapi/linux/prctl.h
> @@ -229,4 +229,9 @@ struct prctl_mm_map {
>  # define PR_PAC_APDBKEY			(1UL << 3)
>  # define PR_PAC_APGAKEY			(1UL << 4)
>  
> +/* Tagged user address controls for arm64 */
> +#define PR_SET_TAGGED_ADDR_CTRL		55
> +#define PR_GET_TAGGED_ADDR_CTRL		56
> +# define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
> +
>  #endif /* _LINUX_PRCTL_H */
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 2969304c29fe..ec48396b4943 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -124,6 +124,12 @@
>  #ifndef PAC_RESET_KEYS
>  # define PAC_RESET_KEYS(a, b)	(-EINVAL)
>  #endif
> +#ifndef SET_TAGGED_ADDR_CTRL
> +# define SET_TAGGED_ADDR_CTRL(a)	(-EINVAL)
> +#endif
> +#ifndef GET_TAGGED_ADDR_CTRL
> +# define GET_TAGGED_ADDR_CTRL()		(-EINVAL)
> +#endif
>  
>  /*
>   * this is where the system-wide overflow UID and GID are defined, for
> @@ -2492,6 +2498,16 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>  			return -EINVAL;
>  		error = PAC_RESET_KEYS(me, arg2);
>  		break;
> +	case PR_SET_TAGGED_ADDR_CTRL:
> +		if (arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = SET_TAGGED_ADDR_CTRL(arg2);
> +		break;
> +	case PR_GET_TAGGED_ADDR_CTRL:
> +		if (arg2 || arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = GET_TAGGED_ADDR_CTRL();
> +		break;

Why do we need two prctl here? We could have only one and use arg2 as set/get
and arg3 as a parameter. What do you think?

>  	default:
>  		error = -EINVAL;
>  		break;
> 

-- 
Regards,
Vincenzo

WARNING: multiple messages have this Message-ID (diff)
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Andrey Konovalov <andreyknvl@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
	kvm@vger.kernel.org, Christian Koenig <Christian.Koenig@amd.com>,
	Szabolcs Nagy <Szabolcs.Nagy@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	dri-devel@lists.freedesktop.org, linux-mm@kvack.org,
	Khalid Aziz <khalid.aziz@oracle.com>,
	Lee Smith <Lee.Smith@arm.com>,
	linux-kselftest@vger.kernel.org,
	Jacob Bramley <Jacob.Bramley@arm.com>,
	Leon Romanovsky <leon@kernel.org>,
	linux-rdma@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	Christoph Hellwig <hch@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>,
	linux-arm-kernel@lists.infradead.org,
	Dave Martin <Dave.Martin@arm.com>,
	Evgeniy Stepanov <eugenis@google.com>,
	linux-media@vger.kernel.org, Kees Cook <keescook@chromium.org>,
	Ruben Ayrapetyan <Ruben.Ayrapetyan@arm.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Dmitry Vyukov <dvyukov@google.com>,
	Kostya Serebryany <kcc@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Felix Kuehling <Felix.Kuehling@amd.com>,
	linux-kernel@vger.kernel.org,
	Jens Wiklander <jens.wiklander@linaro.org>,
	Ramana Radhakrishnan <Ramana.Radhakrishnan@arm.com>,
	Alexander Deucher <Alexander.Deucher@amd.com>,
	Andrew Morton <akpm@linux-foundation.org>, enh <enh@google.com>,
	Robin Murphy <robin.murphy@arm.com>,
	Yishai Hadas <yishaih@mellanox.com>,
	Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Subject: Re: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Tue, 11 Jun 2019 18:09:10 +0100	[thread overview]
Message-ID: <d3dc2b1f-e8c9-c60d-f648-0bc9b08f20e4@arm.com> (raw)
In-Reply-To: <20190611145720.GA63588@arrakis.emea.arm.com>

Hi Catalin,

...

> ---------8<----------------
> From 7c624777a4e545522dec1b34e60f0229cb2bd59f Mon Sep 17 00:00:00 2001
> From: Catalin Marinas <catalin.marinas@arm.com>
> Date: Tue, 11 Jun 2019 13:03:38 +0100
> Subject: [PATCH] arm64: Introduce prctl() options to control the tagged user
>  addresses ABI
> 
> It is not desirable to relax the ABI to allow tagged user addresses into
> the kernel indiscriminately. This patch introduces a prctl() interface
> for enabling or disabling the tagged ABI with a global sysctl control
> for preventing applications from enabling the relaxed ABI (meant for
> testing user-space prctl() return error checking without reconfiguring
> the kernel). The ABI properties are inherited by threads of the same
> application and fork()'ed children but cleared on execve().
> 
> The PR_SET_TAGGED_ADDR_CTRL will be expanded in the future to handle
> MTE-specific settings like imprecise vs precise exceptions.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> ---
>  arch/arm64/include/asm/processor.h   |  6 +++
>  arch/arm64/include/asm/thread_info.h |  1 +
>  arch/arm64/include/asm/uaccess.h     |  5 ++-
>  arch/arm64/kernel/process.c          | 67 ++++++++++++++++++++++++++++
>  include/uapi/linux/prctl.h           |  5 +++
>  kernel/sys.c                         | 16 +++++++
>  6 files changed, 99 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
> index fcd0e691b1ea..fee457456aa8 100644
> --- a/arch/arm64/include/asm/processor.h
> +++ b/arch/arm64/include/asm/processor.h
> @@ -307,6 +307,12 @@ extern void __init minsigstksz_setup(void);
>  /* PR_PAC_RESET_KEYS prctl */
>  #define PAC_RESET_KEYS(tsk, arg)	ptrauth_prctl_reset_keys(tsk, arg)
>  
> +/* PR_TAGGED_ADDR prctl */
> +long set_tagged_addr_ctrl(unsigned long arg);
> +long get_tagged_addr_ctrl(void);
> +#define SET_TAGGED_ADDR_CTRL(arg)	set_tagged_addr_ctrl(arg)
> +#define GET_TAGGED_ADDR_CTRL()		get_tagged_addr_ctrl()
> +
>  /*
>   * For CONFIG_GCC_PLUGIN_STACKLEAK
>   *
> diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
> index c285d1ce7186..7263d4c973ce 100644
> --- a/arch/arm64/include/asm/thread_info.h
> +++ b/arch/arm64/include/asm/thread_info.h
> @@ -101,6 +101,7 @@ void arch_release_task_struct(struct task_struct *tsk);
>  #define TIF_SVE			23	/* Scalable Vector Extension in use */
>  #define TIF_SVE_VL_INHERIT	24	/* Inherit sve_vl_onexec across exec */
>  #define TIF_SSBD		25	/* Wants SSB mitigation */
> +#define TIF_TAGGED_ADDR		26
>

Can you please put a comment here?

>  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
>  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
> diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
> index 9164ecb5feca..995b9ea11a89 100644
> --- a/arch/arm64/include/asm/uaccess.h
> +++ b/arch/arm64/include/asm/uaccess.h
> @@ -73,6 +73,9 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  {
>  	unsigned long ret, limit = current_thread_info()->addr_limit;
>  
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		addr = untagged_addr(addr);
> +
>  	__chk_user_ptr(addr);
>  	asm volatile(
>  	// A + B <= C + 1 for all A,B,C, in four easy steps:
> @@ -94,7 +97,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
>  	return ret;
>  }
>  
> -#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
> +#define access_ok(addr, size)	__range_ok(addr, size)
>  #define user_addr_max			get_fs
>>  #define _ASM_EXTABLE(from, to)						\
> diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
> index 3767fb21a5b8..69d0be1fc708 100644
> --- a/arch/arm64/kernel/process.c
> +++ b/arch/arm64/kernel/process.c
> @@ -30,6 +30,7 @@
>  #include <linux/kernel.h>
>  #include <linux/mm.h>
>  #include <linux/stddef.h>
> +#include <linux/sysctl.h>
>  #include <linux/unistd.h>
>  #include <linux/user.h>
>  #include <linux/delay.h>
> @@ -323,6 +324,7 @@ void flush_thread(void)
>  	fpsimd_flush_thread();
>  	tls_thread_flush();
>  	flush_ptrace_hw_breakpoint(current);
> +	clear_thread_flag(TIF_TAGGED_ADDR);

Nit: in line we the other functions in thread_flush we could have something like
"tagged_addr_thread_flush", maybe inlined.

>  }
>  
>  void release_thread(struct task_struct *dead_task)
> @@ -552,3 +554,68 @@ void arch_setup_new_exec(void)
>  
>  	ptrauth_thread_init_user(current);
>  }
> +
> +/*
> + * Control the relaxed ABI allowing tagged user addresses into the kernel.
> + */
> +static unsigned int tagged_addr_prctl_allowed = 1;
> +
> +long set_tagged_addr_ctrl(unsigned long arg)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +	if (arg & ~PR_TAGGED_ADDR_ENABLE)
> +		return -EINVAL;
> +
> +	if (arg & PR_TAGGED_ADDR_ENABLE)
> +		set_thread_flag(TIF_TAGGED_ADDR);
> +	else
> +		clear_thread_flag(TIF_TAGGED_ADDR);
> +
> +	return 0;
> +}
> +
> +long get_tagged_addr_ctrl(void)
> +{
> +	if (!tagged_addr_prctl_allowed)
> +		return -EINVAL;
> +	if (is_compat_task())
> +		return -EINVAL;
> +
> +	if (test_thread_flag(TIF_TAGGED_ADDR))
> +		return PR_TAGGED_ADDR_ENABLE;
> +
> +	return 0;
> +}
> +
> +/*
> + * Global sysctl to disable the tagged user addresses support. This control
> + * only prevents the tagged address ABI enabling via prctl() and does not
> + * disable it for tasks that already opted in to the relaxed ABI.
> + */
> +static int zero;
> +static int one = 1;
> +
> +static struct ctl_table tagged_addr_sysctl_table[] = {
> +	{
> +		.procname	= "tagged_addr",
> +		.mode		= 0644,
> +		.data		= &tagged_addr_prctl_allowed,
> +		.maxlen		= sizeof(int),
> +		.proc_handler	= proc_dointvec_minmax,
> +		.extra1		= &zero,
> +		.extra2		= &one,
> +	},
> +	{ }
> +};
> +
> +static int __init tagged_addr_init(void)
> +{
> +	if (!register_sysctl("abi", tagged_addr_sysctl_table))
> +		return -EINVAL;
> +	return 0;
> +}
> +
> +core_initcall(tagged_addr_init);

process.c seems already a bit "overcrowded". Probably we could move all the
tagged_addr features in a separate file. What do you think? It would make easier
the implementation of mte as well going forward.

> diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
> index 094bb03b9cc2..2e927b3e9d6c 100644
> --- a/include/uapi/linux/prctl.h
> +++ b/include/uapi/linux/prctl.h
> @@ -229,4 +229,9 @@ struct prctl_mm_map {
>  # define PR_PAC_APDBKEY			(1UL << 3)
>  # define PR_PAC_APGAKEY			(1UL << 4)
>  
> +/* Tagged user address controls for arm64 */
> +#define PR_SET_TAGGED_ADDR_CTRL		55
> +#define PR_GET_TAGGED_ADDR_CTRL		56
> +# define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
> +
>  #endif /* _LINUX_PRCTL_H */
> diff --git a/kernel/sys.c b/kernel/sys.c
> index 2969304c29fe..ec48396b4943 100644
> --- a/kernel/sys.c
> +++ b/kernel/sys.c
> @@ -124,6 +124,12 @@
>  #ifndef PAC_RESET_KEYS
>  # define PAC_RESET_KEYS(a, b)	(-EINVAL)
>  #endif
> +#ifndef SET_TAGGED_ADDR_CTRL
> +# define SET_TAGGED_ADDR_CTRL(a)	(-EINVAL)
> +#endif
> +#ifndef GET_TAGGED_ADDR_CTRL
> +# define GET_TAGGED_ADDR_CTRL()		(-EINVAL)
> +#endif
>  
>  /*
>   * this is where the system-wide overflow UID and GID are defined, for
> @@ -2492,6 +2498,16 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
>  			return -EINVAL;
>  		error = PAC_RESET_KEYS(me, arg2);
>  		break;
> +	case PR_SET_TAGGED_ADDR_CTRL:
> +		if (arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = SET_TAGGED_ADDR_CTRL(arg2);
> +		break;
> +	case PR_GET_TAGGED_ADDR_CTRL:
> +		if (arg2 || arg3 || arg4 || arg5)
> +			return -EINVAL;
> +		error = GET_TAGGED_ADDR_CTRL();
> +		break;

Why do we need two prctl here? We could have only one and use arg2 as set/get
and arg3 as a parameter. What do you think?

>  	default:
>  		error = -EINVAL;
>  		break;
> 

-- 
Regards,
Vincenzo

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-06-11 17:09 UTC|newest]

Thread overview: 356+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-03 16:55 [PATCH v16 00/16] arm64: untag user pointers passed to the kernel Andrey Konovalov
2019-06-03 16:55 ` Andrey Konovalov
2019-06-03 16:55 ` Andrey Konovalov
2019-06-03 16:55 ` Andrey Konovalov
2019-06-03 16:55 ` andreyknvl
2019-06-03 16:55 ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 01/16] uaccess: add untagged_addr definition for other arches Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 17:02   ` Khalid Aziz
2019-06-03 17:02     ` Khalid Aziz
2019-06-03 17:02     ` Khalid Aziz
2019-06-03 17:02     ` khalid.aziz
2019-06-03 17:02     ` Khalid Aziz
2019-06-03 17:06     ` Andrey Konovalov
2019-06-03 17:06       ` Andrey Konovalov
2019-06-03 17:06       ` Andrey Konovalov
2019-06-03 17:06       ` Andrey Konovalov
2019-06-03 17:06       ` andreyknvl
2019-06-03 17:06       ` Andrey Konovalov
2019-06-03 17:24       ` Khalid Aziz
2019-06-03 17:24         ` Khalid Aziz
2019-06-03 17:24         ` Khalid Aziz
2019-06-03 17:24         ` Khalid Aziz
2019-06-03 17:24         ` khalid.aziz
2019-06-03 17:24         ` Khalid Aziz
2019-06-03 17:29         ` Christoph Hellwig
2019-06-03 17:29           ` Christoph Hellwig
2019-06-03 17:29           ` Christoph Hellwig
2019-06-03 17:29           ` Christoph Hellwig
2019-06-03 17:29           ` hch
2019-06-03 17:29           ` Christoph Hellwig
2019-06-03 18:17           ` Khalid Aziz
2019-06-03 18:17             ` Khalid Aziz
2019-06-03 18:17             ` Khalid Aziz
2019-06-03 18:17             ` Khalid Aziz
2019-06-03 18:17             ` khalid.aziz
2019-06-03 18:17             ` Khalid Aziz
2019-06-04 11:45             ` Andrey Konovalov
2019-06-04 11:45               ` Andrey Konovalov
2019-06-04 11:45               ` Andrey Konovalov
2019-06-04 11:45               ` Andrey Konovalov
2019-06-04 11:45               ` andreyknvl
2019-06-04 11:45               ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:51   ` Kees Cook
2019-06-08  3:51     ` Kees Cook
2019-06-08  3:51     ` Kees Cook
2019-06-08  3:51     ` keescook
2019-06-08  3:51     ` Kees Cook
2019-06-10 17:53   ` Catalin Marinas
2019-06-10 17:53     ` Catalin Marinas
2019-06-10 17:53     ` Catalin Marinas
2019-06-10 17:53     ` catalin.marinas
2019-06-10 17:53     ` Catalin Marinas
2019-06-10 18:07     ` Kees Cook
2019-06-10 18:07       ` Kees Cook
2019-06-10 18:07       ` Kees Cook
2019-06-10 18:07       ` keescook
2019-06-10 18:07       ` Kees Cook
2019-06-10 18:53       ` Catalin Marinas
2019-06-10 18:53         ` Catalin Marinas
2019-06-10 18:53         ` Catalin Marinas
2019-06-10 18:53         ` catalin.marinas
2019-06-10 18:53         ` Catalin Marinas
2019-06-10 20:36         ` Kees Cook
2019-06-10 20:36           ` Kees Cook
2019-06-10 20:36           ` Kees Cook
2019-06-10 20:36           ` keescook
2019-06-10 20:36           ` Kees Cook
2019-06-11 14:57     ` Catalin Marinas
2019-06-11 14:57       ` Catalin Marinas
2019-06-11 14:57       ` Catalin Marinas
2019-06-11 17:09       ` Vincenzo Frascino [this message]
2019-06-11 17:09         ` Vincenzo Frascino
2019-06-11 17:09         ` Vincenzo Frascino
2019-06-12  9:32         ` Catalin Marinas
2019-06-12  9:32           ` Catalin Marinas
2019-06-12  9:32           ` Catalin Marinas
2019-06-12 11:52           ` Vincenzo Frascino
2019-06-12 11:52             ` Vincenzo Frascino
2019-06-12 11:52             ` Vincenzo Frascino
2019-06-11 17:09       ` Andrey Konovalov
2019-06-11 17:09         ` Andrey Konovalov
2019-06-11 17:09         ` Andrey Konovalov
2019-06-11 17:09         ` Andrey Konovalov
2019-06-11 17:39         ` Catalin Marinas
2019-06-11 17:39           ` Catalin Marinas
2019-06-11 17:39           ` Catalin Marinas
2019-06-11 17:39           ` Catalin Marinas
2019-06-12 11:03           ` Andrey Konovalov
2019-06-12 11:03             ` Andrey Konovalov
2019-06-12 11:03             ` Andrey Konovalov
2019-06-12 11:03             ` Andrey Konovalov
2019-06-12 11:04             ` Catalin Marinas
2019-06-12 11:04               ` Catalin Marinas
2019-06-12 11:04               ` Catalin Marinas
2019-06-12 11:04               ` Catalin Marinas
2019-06-03 16:55 ` [PATCH v16 03/16] lib, arm64: untag user pointers in strn*_user Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:48   ` Kees Cook
2019-06-08  3:48     ` Kees Cook
2019-06-08  3:48     ` Kees Cook
2019-06-08  3:48     ` keescook
2019-06-08  3:48     ` Kees Cook
2019-06-11 20:06   ` Khalid Aziz
2019-06-11 20:06     ` Khalid Aziz
2019-06-11 20:06     ` Khalid Aziz
2019-06-03 16:55 ` [PATCH v16 04/16] mm: untag user pointers in do_pages_move Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:49   ` Kees Cook
2019-06-08  3:49     ` Kees Cook
2019-06-08  3:49     ` Kees Cook
2019-06-08  3:49     ` keescook
2019-06-08  3:49     ` Kees Cook
2019-06-11 20:18   ` Khalid Aziz
2019-06-11 20:18     ` Khalid Aziz
2019-06-11 20:18     ` Khalid Aziz
2019-06-12 11:08     ` Andrey Konovalov
2019-06-12 11:08       ` Andrey Konovalov
2019-06-12 11:08       ` Andrey Konovalov
2019-06-12 11:08       ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 05/16] arm64: untag user pointers passed to memory syscalls Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:51   ` Kees Cook
2019-06-08  3:51     ` Kees Cook
2019-06-08  3:51     ` Kees Cook
2019-06-08  3:51     ` keescook
2019-06-08  3:51     ` Kees Cook
2019-06-10 14:28   ` Catalin Marinas
2019-06-10 14:28     ` Catalin Marinas
2019-06-10 14:28     ` Catalin Marinas
2019-06-10 14:28     ` catalin.marinas
2019-06-10 14:28     ` Catalin Marinas
2019-06-11 15:35     ` Andrey Konovalov
2019-06-11 15:35       ` Andrey Konovalov
2019-06-11 15:35       ` Andrey Konovalov
2019-06-11 15:35       ` Andrey Konovalov
2019-06-11 17:44       ` Catalin Marinas
2019-06-11 17:44         ` Catalin Marinas
2019-06-11 17:44         ` Catalin Marinas
2019-06-11 17:44         ` Catalin Marinas
2019-06-12 11:13         ` Andrey Konovalov
2019-06-12 11:13           ` Andrey Konovalov
2019-06-12 11:13           ` Andrey Konovalov
2019-06-12 11:13           ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 06/16] mm, arm64: untag user pointers in mm/gup.c Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:59   ` Kees Cook
2019-06-08  3:59     ` Kees Cook
2019-06-08  3:59     ` Kees Cook
2019-06-08  3:59     ` keescook
2019-06-08  3:59     ` Kees Cook
2019-06-03 16:55 ` [PATCH v16 07/16] mm, arm64: untag user pointers in get_vaddr_frames Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  4:00   ` Kees Cook
2019-06-08  4:00     ` Kees Cook
2019-06-08  4:00     ` Kees Cook
2019-06-08  4:00     ` keescook
2019-06-08  4:00     ` Kees Cook
2019-06-10 14:29   ` Catalin Marinas
2019-06-10 14:29     ` Catalin Marinas
2019-06-10 14:29     ` Catalin Marinas
2019-06-10 14:29     ` catalin.marinas
2019-06-10 14:29     ` Catalin Marinas
2019-06-03 16:55 ` [PATCH v16 08/16] fs, arm64: untag user pointers in copy_mount_options Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  4:02   ` Kees Cook
2019-06-08  4:02     ` Kees Cook
2019-06-08  4:02     ` Kees Cook
2019-06-08  4:02     ` keescook
2019-06-08  4:02     ` Kees Cook
2019-06-11 14:38     ` Andrey Konovalov
2019-06-11 14:38       ` Andrey Konovalov
2019-06-11 14:38       ` Andrey Konovalov
2019-06-11 14:38       ` Andrey Konovalov
2019-06-12 11:36       ` Andrey Konovalov
2019-06-12 11:36         ` Andrey Konovalov
2019-06-12 11:36         ` Andrey Konovalov
2019-06-12 11:36         ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 09/16] fs, arm64: untag user pointers in fs/userfaultfd.c Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  4:03   ` Kees Cook
2019-06-08  4:03     ` Kees Cook
2019-06-08  4:03     ` Kees Cook
2019-06-08  4:03     ` keescook
2019-06-08  4:03     ` Kees Cook
2019-06-12 10:45   ` Catalin Marinas
2019-06-12 10:45     ` Catalin Marinas
2019-06-12 10:45     ` Catalin Marinas
2019-06-03 16:55 ` [PATCH v16 10/16] drm/amdgpu, arm64: untag user pointers Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 11/16] drm/radeon, arm64: untag user pointers in radeon_gem_userptr_ioctl Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55 ` [PATCH v16 12/16] IB, arm64: untag user pointers in ib_uverbs_(re)reg_mr() Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 17:46   ` Jason Gunthorpe
2019-06-03 17:46     ` Jason Gunthorpe
2019-06-03 17:46     ` Jason Gunthorpe
2019-06-03 17:46     ` jgg
2019-06-03 17:46     ` Jason Gunthorpe
2019-06-04 12:18     ` Andrey Konovalov
2019-06-04 12:18       ` Andrey Konovalov
2019-06-04 12:18       ` Andrey Konovalov
2019-06-04 12:18       ` Andrey Konovalov
2019-06-04 12:18       ` andreyknvl
2019-06-04 12:18       ` Andrey Konovalov
2019-06-04 12:27       ` Jason Gunthorpe
2019-06-04 12:27         ` Jason Gunthorpe
2019-06-04 12:27         ` Jason Gunthorpe
2019-06-04 12:27         ` Jason Gunthorpe
2019-06-04 12:27         ` jgg
2019-06-04 12:27         ` Jason Gunthorpe
2019-06-04 12:45         ` Andrey Konovalov
2019-06-04 12:45           ` Andrey Konovalov
2019-06-04 12:45           ` Andrey Konovalov
2019-06-04 12:45           ` Andrey Konovalov
2019-06-04 12:45           ` andreyknvl
2019-06-04 12:45           ` Andrey Konovalov
2019-06-04 13:02           ` Jason Gunthorpe
2019-06-04 13:02             ` Jason Gunthorpe
2019-06-04 13:02             ` Jason Gunthorpe
2019-06-04 13:02             ` Jason Gunthorpe
2019-06-04 13:02             ` jgg
2019-06-04 13:02             ` Jason Gunthorpe
2019-06-04 13:09             ` Andrey Konovalov
2019-06-04 13:09               ` Andrey Konovalov
2019-06-04 13:09               ` Andrey Konovalov
2019-06-04 13:09               ` Andrey Konovalov
2019-06-04 13:09               ` andreyknvl
2019-06-04 13:09               ` Andrey Konovalov
2019-06-12 11:01               ` Catalin Marinas
2019-06-12 11:01                 ` Catalin Marinas
2019-06-12 11:01                 ` Catalin Marinas
2019-06-12 11:01                 ` Catalin Marinas
2019-06-03 16:55 ` [PATCH v16 13/16] media/v4l2-core, arm64: untag user pointers in videobuf_dma_contig_user_get Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:52   ` Kees Cook
2019-06-08  3:52     ` Kees Cook
2019-06-08  3:52     ` Kees Cook
2019-06-08  3:52     ` keescook
2019-06-08  3:52     ` Kees Cook
2019-06-03 16:55 ` [PATCH v16 14/16] tee, arm64: untag user pointers in tee_shm_register Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-07  5:33   ` Jens Wiklander
2019-06-07  5:33     ` Jens Wiklander
2019-06-07  5:33     ` Jens Wiklander
2019-06-07  5:33     ` Jens Wiklander
2019-06-07  5:33     ` jens.wiklander
2019-06-07  5:33     ` Jens Wiklander
2019-06-08  4:05   ` Kees Cook
2019-06-08  4:05     ` Kees Cook
2019-06-08  4:05     ` Kees Cook
2019-06-08  4:05     ` keescook
2019-06-08  4:05     ` Kees Cook
2019-06-03 16:55 ` [PATCH v16 15/16] vfio/type1, arm64: untag user pointers in vaddr_get_pfn Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:58   ` Kees Cook
2019-06-08  3:58     ` Kees Cook
2019-06-08  3:58     ` Kees Cook
2019-06-08  3:58     ` keescook
2019-06-08  3:58     ` Kees Cook
2019-06-12 10:38   ` Catalin Marinas
2019-06-12 10:38     ` Catalin Marinas
2019-06-12 10:38     ` Catalin Marinas
2019-06-03 16:55 ` [PATCH v16 16/16] selftests, arm64: add a selftest for passing tagged pointers to kernel Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` Andrey Konovalov
2019-06-03 16:55   ` andreyknvl
2019-06-03 16:55   ` Andrey Konovalov
2019-06-08  3:56   ` Kees Cook
2019-06-08  3:56     ` Kees Cook
2019-06-08  3:56     ` Kees Cook
2019-06-08  3:56     ` keescook
2019-06-08  3:56     ` Kees Cook
2019-06-10 22:08     ` shuah
2019-06-10 22:08       ` shuah
2019-06-10 22:08       ` shuah
2019-06-10 22:08       ` shuah
2019-06-10 22:08       ` shuah
2019-06-11 15:01   ` Catalin Marinas
2019-06-11 15:01     ` Catalin Marinas
2019-06-11 15:01     ` Catalin Marinas
2019-06-11 17:18     ` Andrey Konovalov
2019-06-11 17:18       ` Andrey Konovalov
2019-06-11 17:18       ` Andrey Konovalov
2019-06-11 17:18       ` Andrey Konovalov
2019-06-11 17:50       ` Catalin Marinas
2019-06-11 17:50         ` Catalin Marinas
2019-06-11 17:50         ` Catalin Marinas
2019-06-11 17:50         ` Catalin Marinas
2019-06-12 11:14         ` Andrey Konovalov
2019-06-12 11:14           ` Andrey Konovalov
2019-06-12 11:14           ` Andrey Konovalov
2019-06-12 11:14           ` Andrey Konovalov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d3dc2b1f-e8c9-c60d-f648-0bc9b08f20e4@arm.com \
    --to=vincenzo.frascino@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=Felix.Kuehling@amd.com \
    --cc=Jacob.Bramley@arm.com \
    --cc=Ruben.Ayrapetyan@arm.com \
    --cc=Szabolcs.Nagy@arm.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=andreyknvl@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=dvyukov@google.com \
    --cc=eugenis@google.com \
    --cc=hch@infradead.org \
    --cc=jgg@ziepe.ca \
    --cc=keescook@chromium.org \
    --cc=kevin.brodsky@arm.com \
    --cc=khalid.aziz@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.