All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Konovalov <andreyknvl@google.com>
To: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org,
	linux-media@vger.kernel.org, kvm@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Cc: Catalin Marinas <catalin.marinas@arm.com>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Mark Rutland <mark.rutland@arm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Kees Cook <keescook@chromium.org>,
	Yishai Hadas <yishaih@mellanox.com>,
	Felix Kuehling <Felix.Kuehling@amd.com>,
	Alexander Deucher <Alexander.Deucher@amd.com>,
	Christian Koenig <Christian.Koenig@amd.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Jens Wiklander <jens.wiklander@linaro.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Leon Romanovsky <leon@kernel.org>,
	Luc Van Oostenryck <luc.vanoostenryck@gmail.com>,
	Dave Martin <Dave.Martin@arm.com>,
	Khalid Aziz <khalid.aziz@oracle.com>, enh <enh@>
Subject: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Mon,  3 Jun 2019 18:55:04 +0200	[thread overview]
Message-ID: <4327b260fb17c4776a1e3c844f388e4948cfb747.1559580831.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1559580831.git.andreyknvl@google.com>

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog

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

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog


WARNING: multiple messages have this Message-ID (diff)
From: andreyknvl at google.com (Andrey Konovalov)
Subject: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Mon,  3 Jun 2019 18:55:04 +0200	[thread overview]
Message-ID: <4327b260fb17c4776a1e3c844f388e4948cfb747.1559580831.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1559580831.git.andreyknvl@google.com>

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl at google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog

WARNING: multiple messages have this Message-ID (diff)
From: andreyknvl@google.com (Andrey Konovalov)
Subject: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Mon,  3 Jun 2019 18:55:04 +0200	[thread overview]
Message-ID: <4327b260fb17c4776a1e3c844f388e4948cfb747.1559580831.git.andreyknvl@google.com> (raw)
Message-ID: <20190603165504.vPKI6M1NRi4bPg1AsSJ7ZPR0EDQr1c6CzSFZxjVFXn4@z> (raw)
In-Reply-To: <cover.1559580831.git.andreyknvl@google.com>

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl at google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog

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

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog


WARNING: multiple messages have this Message-ID (diff)
From: Andrey Konovalov <andreyknvl@google.com>
To: linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org,
	 linux-kernel@vger.kernel.org, amd-gfx@lists.freedesktop.org,
	 dri-devel@lists.freedesktop.org, linux-rdma@vger.kernel.org,
	 linux-media@vger.kernel.org, kvm@vger.kernel.org,
	 linux-kselftest@vger.kernel.org
Cc: Mark Rutland <mark.rutland@arm.com>,
	Szabolcs Nagy <Szabolcs.Nagy@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Kostya Serebryany <kcc@google.com>,
	Khalid Aziz <khalid.aziz@oracle.com>,
	Felix Kuehling <Felix.Kuehling@amd.com>,
	Vincenzo Frascino <vincenzo.frascino@arm.com>,
	Jacob Bramley <Jacob.Bramley@arm.com>,
	Leon Romanovsky <leon@kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>, Dave Martin <Dave.Martin@arm.com>,
	Evgeniy Stepanov <eugenis@google.com>,
	Kevin Brodsky <kevin.brodsky@arm.com>,
	Kees Cook <keescook@chromium.org>,
	Ruben Ayrapetyan <Ruben.Ayrapetyan@arm.com>,
	Andrey Konovalov <andreyknvl@google.com>,
	Ramana Radhakrishnan <Ramana.Radhakrishnan@arm.com>,
	Alex Williamson <alex.williamson@redhat.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Dmitry Vyukov <dvyukov@google.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Yishai Hadas <yishaih@mellanox.com>,
	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: [PATCH v16 02/16] arm64: untag user pointers in access_ok and __uaccess_mask_ptr
Date: Mon,  3 Jun 2019 18:55:04 +0200	[thread overview]
Message-ID: <4327b260fb17c4776a1e3c844f388e4948cfb747.1559580831.git.andreyknvl@google.com> (raw)
In-Reply-To: <cover.1559580831.git.andreyknvl@google.com>

This patch is a part of a series that extends arm64 kernel ABI to allow to
pass tagged user pointers (with the top byte set to something else other
than 0x00) as syscall arguments.

copy_from_user (and a few other similar functions) are used to copy data
from user memory into the kernel memory or vice versa. Since a user can
provided a tagged pointer to one of the syscalls that use copy_from_user,
we need to correctly handle such pointers.

Do this by untagging user pointers in access_ok and in __uaccess_mask_ptr,
before performing access validity checks.

Note, that this patch only temporarily untags the pointers to perform the
checks, but then passes them as is into the kernel internals.

Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
---
 arch/arm64/include/asm/uaccess.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
index e5d5f31c6d36..9164ecb5feca 100644
--- a/arch/arm64/include/asm/uaccess.h
+++ b/arch/arm64/include/asm/uaccess.h
@@ -94,7 +94,7 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
 	return ret;
 }
 
-#define access_ok(addr, size)	__range_ok(addr, size)
+#define access_ok(addr, size)	__range_ok(untagged_addr(addr), size)
 #define user_addr_max			get_fs
 
 #define _ASM_EXTABLE(from, to)						\
@@ -226,7 +226,8 @@ static inline void uaccess_enable_not_uao(void)
 
 /*
  * Sanitise a uaccess pointer such that it becomes NULL if above the
- * current addr_limit.
+ * current addr_limit. In case the pointer is tagged (has the top byte set),
+ * untag the pointer before checking.
  */
 #define uaccess_mask_ptr(ptr) (__typeof__(ptr))__uaccess_mask_ptr(ptr)
 static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
@@ -234,10 +235,11 @@ static inline void __user *__uaccess_mask_ptr(const void __user *ptr)
 	void __user *safe_ptr;
 
 	asm volatile(
-	"	bics	xzr, %1, %2\n"
+	"	bics	xzr, %3, %2\n"
 	"	csel	%0, %1, xzr, eq\n"
 	: "=&r" (safe_ptr)
-	: "r" (ptr), "r" (current_thread_info()->addr_limit)
+	: "r" (ptr), "r" (current_thread_info()->addr_limit),
+	  "r" (untagged_addr(ptr))
 	: "cc");
 
 	csdb();
-- 
2.22.0.rc1.311.g5d7573a151-goog


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

  parent reply	other threads:[~2019-06-03 16:55 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 ` Andrey Konovalov [this message]
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   ` 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
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=4327b260fb17c4776a1e3c844f388e4948cfb747.1559580831.git.andreyknvl@google.com \
    --to=andreyknvl@google.com \
    --cc=Alexander.Deucher@amd.com \
    --cc=Christian.Koenig@amd.com \
    --cc=Dave.Martin@arm.com \
    --cc=Felix.Kuehling@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex.williamson@redhat.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=catalin.marinas@arm.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jens.wiklander@linaro.org \
    --cc=keescook@chromium.org \
    --cc=khalid.aziz@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.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=luc.vanoostenryck@gmail.com \
    --cc=mark.rutland@arm.com \
    --cc=mchehab@kernel.org \
    --cc=vincenzo.frascino@arm.com \
    --cc=will.deacon@arm.com \
    --cc=yishaih@mellanox.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.