|
Ivan T. Ivanov |
04e4a5 |
From: Vincenzo Frascino <vincenzo.frascino@arm.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Date: Mon, 1 Apr 2019 12:30:14 +0100
|
|
Ivan T. Ivanov |
04e4a5 |
Subject: arm64: compat: Reduce address limit
|
|
Ivan T. Ivanov |
04e4a5 |
Git-commit: d263119387de9975d2acba1dfd3392f7c5979c18
|
|
Ivan T. Ivanov |
04e4a5 |
Patch-mainline: v5.2-rc1
|
|
Ivan T. Ivanov |
04e4a5 |
References: git-fixes
|
|
Ivan T. Ivanov |
04e4a5 |
|
|
Ivan T. Ivanov |
04e4a5 |
Currently, compat tasks running on arm64 can allocate memory up to
|
|
Ivan T. Ivanov |
04e4a5 |
TASK_SIZE_32 (UL(0x100000000)).
|
|
Ivan T. Ivanov |
04e4a5 |
|
|
Ivan T. Ivanov |
04e4a5 |
This means that mmap() allocations, if we treat them as returning an
|
|
Ivan T. Ivanov |
04e4a5 |
array, are not compliant with the sections 6.5.8 of the C standard
|
|
Ivan T. Ivanov |
04e4a5 |
(C99) which states that: "If the expression P points to an element of
|
|
Ivan T. Ivanov |
04e4a5 |
an array object and the expression Q points to the last element of the
|
|
Ivan T. Ivanov |
04e4a5 |
same array object, the pointer expression Q+1 compares greater than P".
|
|
Ivan T. Ivanov |
04e4a5 |
|
|
Ivan T. Ivanov |
04e4a5 |
Redefine TASK_SIZE_32 to address the issue.
|
|
Ivan T. Ivanov |
04e4a5 |
|
|
Ivan T. Ivanov |
04e4a5 |
Cc: Catalin Marinas <catalin.marinas@arm.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Cc: Will Deacon <will.deacon@arm.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Cc: Jann Horn <jannh@google.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Cc: <stable@vger.kernel.org>
|
|
Ivan T. Ivanov |
04e4a5 |
Reported-by: Jann Horn <jannh@google.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Signed-off-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
|
|
Ivan T. Ivanov |
04e4a5 |
[will: fixed typo in comment]
|
|
Ivan T. Ivanov |
04e4a5 |
Signed-off-by: Will Deacon <will.deacon@arm.com>
|
|
Ivan T. Ivanov |
04e4a5 |
Acked-by: Ivan T. Ivanov <iivanov@suse.de>
|
|
Ivan T. Ivanov |
04e4a5 |
---
|
|
Ivan T. Ivanov |
04e4a5 |
arch/arm64/include/asm/processor.h | 8 ++++++++
|
|
Ivan T. Ivanov |
04e4a5 |
1 file changed, 8 insertions(+)
|
|
Ivan T. Ivanov |
04e4a5 |
|
|
Ivan T. Ivanov |
04e4a5 |
--- a/arch/arm64/include/asm/processor.h
|
|
Ivan T. Ivanov |
04e4a5 |
+++ b/arch/arm64/include/asm/processor.h
|
|
Ivan T. Ivanov |
04e4a5 |
@@ -51,7 +51,15 @@
|
|
Ivan T. Ivanov |
04e4a5 |
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area.
|
|
Ivan T. Ivanov |
04e4a5 |
*/
|
|
Ivan T. Ivanov |
04e4a5 |
#ifdef CONFIG_COMPAT
|
|
Ivan T. Ivanov |
04e4a5 |
+#ifdef CONFIG_ARM64_64K_PAGES
|
|
Ivan T. Ivanov |
04e4a5 |
+/*
|
|
Ivan T. Ivanov |
04e4a5 |
+ * With CONFIG_ARM64_64K_PAGES enabled, the last page is occupied
|
|
Ivan T. Ivanov |
04e4a5 |
+ * by the compat vectors page.
|
|
Ivan T. Ivanov |
04e4a5 |
+ */
|
|
Ivan T. Ivanov |
04e4a5 |
#define TASK_SIZE_32 UL(0x100000000)
|
|
Ivan T. Ivanov |
04e4a5 |
+#else
|
|
Ivan T. Ivanov |
04e4a5 |
+#define TASK_SIZE_32 (UL(0x100000000) - PAGE_SIZE)
|
|
Ivan T. Ivanov |
04e4a5 |
+#endif /* CONFIG_ARM64_64K_PAGES */
|
|
Ivan T. Ivanov |
04e4a5 |
#define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \
|
|
Ivan T. Ivanov |
04e4a5 |
TASK_SIZE_32 : TASK_SIZE_64)
|
|
Ivan T. Ivanov |
04e4a5 |
#define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \
|