FAILED: patch "[PATCH] arm64: kaslr: keep modules inside module region when KASAN is" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6f496a555d93db7a11d4860b9220d904822f586a Mon Sep 17 00:00:00 2001
From: Ard Biesheuvel <[email protected]>
Date: Tue, 25 Jun 2019 19:08:54 +0200
Subject: [PATCH] arm64: kaslr: keep modules inside module region when KASAN is
enabled
When KASLR and KASAN are both enabled, we keep the modules where they are, and randomize the placement of the kernel so it is within 2 GB of the module region. The reason for this is that putting modules in the vmalloc region (like we normally do when KASLR is enabled) is not possible in this case, given that the entire vmalloc region is already backed by KASAN zero shadow pages, and so allocating dedicated KASAN shadow space as required by loaded modules is not possible.
The default module allocation window is set to [_etext - 128MB, _etext] in kaslr.c, which is appropriate for KASLR kernels booted without a seed or with 'nokaslr' on the command line. However, as it turns out, it is not quite correct for the KASAN case, since it still intersects the vmalloc region at the top, where attempts to allocate shadow pages will collide with the KASAN zero shadow pages, causing a WARN() and all kinds of other trouble. So cap the top end to MODULES_END explicitly when running with KASAN.
arch/arm64/kernel/module.c +6 -2
@@ -32,6 +32,7 @@void *module_alloc (unsigned long size) { +u64 module_alloc_end = module_alloc_base +MODULES_VSIZE ;gfp_t gfp_mask =GFP_KERNEL ;void *p;
@@ -39,9 +40,12 @@ void *module_alloc(unsigned long size)if (IS_ENABLED (CONFIG_ARM64_MODULE_PLTS )) gfp_mask |= __GFP_NOWARN; +if (IS_ENABLED (CONFIG_KASAN )) +/* don't exceed the static module region - see below */ + module_alloc_end =MODULES_END ; + p =__vmalloc_node_range (size,MODULE_ALIGN , module_alloc_base, - module_alloc_base +MODULES_VSIZE , - gfp_mask,PAGE_KERNEL_EXEC ,0 , + module_alloc_end, gfp_mask,PAGE_KERNEL_EXEC ,0 ,NUMA_NO_NODE ,__builtin_return_address (0 )); if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
Quoted 10 lines · On Fri, Jul 05, 2019 at 10:54:20AM +0200, [email protected] wrote:
The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
Quoted 7 lines
------------------ original commit in Linus's tree ------------------
From
6f496a555d93db7a11d4860b9220d904822f586aMon Sep 17 00:00:00 2001
From: Ard Biesheuvel <[email protected]>
Date: Tue, 25 Jun 2019 19:08:54 +0200
Subject: [PATCH] arm64: kaslr: keep modules inside module region when KASAN is
enabled
4.9 backport below.
Will
--->8
From aea0e2ae427420e14ee0f442ff901de7945e3b8b Mon Sep 17 00:00:00 2001
From: Ard Biesheuvel <[email protected]>
Date: Tue, 25 Jun 2019 19:08:54 +0200
Subject: [PATCH] arm64: kaslr: keep modules inside module region when KASAN is
enabled
[Commit 6f496a555d93db7a11d4860b9220d904822f586a upstream.]
When KASLR and KASAN are both enabled, we keep the modules where they are, and randomize the placement of the kernel so it is within 2 GB of the module region. The reason for this is that putting modules in the vmalloc region (like we normally do when KASLR is enabled) is not possible in this case, given that the entire vmalloc region is already backed by KASAN zero shadow pages, and so allocating dedicated KASAN shadow space as required by loaded modules is not possible.
The default module allocation window is set to [_etext - 128MB, _etext] in kaslr.c, which is appropriate for KASLR kernels booted without a seed or with 'nokaslr' on the command line. However, as it turns out, it is not quite correct for the KASAN case, since it still intersects the vmalloc region at the top, where attempts to allocate shadow pages will collide with the KASAN zero shadow pages, causing a WARN() and all kinds of other trouble. So cap the top end to MODULES_END explicitly when running with KASAN.
--- arch/arm64/kernel/module.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
arch/arm64/kernel/module.c +6 -2
@@ -33,10 +33,14 @@void *module_alloc (unsigned long size) {void *p; +u64 module_alloc_end = module_alloc_base +MODULES_VSIZE ; + +if (IS_ENABLED (CONFIG_KASAN )) +/* don't exceed the static module region - see below */ + module_alloc_end =MODULES_END ; p =__vmalloc_node_range (size,MODULE_ALIGN , module_alloc_base, - module_alloc_base +MODULES_VSIZE , -GFP_KERNEL ,PAGE_KERNEL_EXEC ,0 , + module_alloc_end,GFP_KERNEL ,PAGE_KERNEL_EXEC ,0 ,NUMA_NO_NODE ,__builtin_return_address (0 )); if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
Signature · 1 line
2.11.0
Greg KH
maintainerQuoted 19 lines · Will Deacon
Quoted 10 lines · On Fri, Jul 05, 2019 at 10:54:20AM +0200, [email protected] wrote:
The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
Quoted 7 lines
------------------ original commit in Linus's tree ------------------
From
6f496a555d93db7a11d4860b9220d904822f586aMon Sep 17 00:00:00 2001
From: Ard Biesheuvel <[email protected]>
Date: Tue, 25 Jun 2019 19:08:54 +0200
Subject: [PATCH] arm64: kaslr: keep modules inside module region when KASAN is
enabled
Quoted 3 lines
4.9 backport below.
Will
Now queued up, thanks!
greg k-h