From: Christopher Covington <cov@codeaurora.org>
To: criu@openvz.org, Will Deacon <will.deacon@arm.com>,
linux-mm@kvack.org, Laurent Dufour <ldufour@linux.vnet.ibm.com>
Cc: Christopher Covington <cov@codeaurora.org>,
Arnd Bergmann <arnd@arndb.de>,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC v2 1/7] mm: Provide generic VDSO unmap and remap functions
Date: Tue, 1 Nov 2016 11:10:55 -0600 [thread overview]
Message-ID: <20161101171101.24704-1-cov@codeaurora.org> (raw)
When Address Space Layout Randomization (ASLR, randmaps) is enabled, the
address of the VDSO fluctuates from one process to the next. If
Checkpoint/Restore In Userspace (CRIU) is to fully replicate the memory map
of a previous process, it must be able to remap the VDSO of a new process
to the address used by the previous process. Historically this has been
implemented in architecture-specific code for PowerPC and x86. In order to
support 32-bit and 64-bit ARM without further duplication of code, copy
Laurent Dufour's implementation for PowerPC with slight modifications to a
generic location. This is hopefully the beginning of a long process of VDSO
code de-duplication between architectures.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
---
include/asm-generic/mm_hooks.h | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/include/asm-generic/mm_hooks.h b/include/asm-generic/mm_hooks.h
index cc5d9a1..73f09f1 100644
--- a/include/asm-generic/mm_hooks.h
+++ b/include/asm-generic/mm_hooks.h
@@ -1,7 +1,17 @@
/*
- * Define generic no-op hooks for arch_dup_mmap, arch_exit_mmap
- * and arch_unmap to be included in asm-FOO/mmu_context.h for any
- * arch FOO which doesn't need to hook these.
+ * Define generic hooks for arch_dup_mmap, arch_exit_mmap and arch_unmap to be
+ * included in asm-FOO/mmu_context.h for any arch FOO which doesn't need to
+ * specially hook these.
+ *
+ * arch_remap originally from include/linux-mm-arch-hooks.h
+ * arch_unmap originally from arch/powerpc/include/asm/mmu_context.h
+ * Copyright (C) 2015, IBM Corporation
+ * Author: Laurent Dufour <ldufour@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
*/
#ifndef _ASM_GENERIC_MM_HOOKS_H
#define _ASM_GENERIC_MM_HOOKS_H
@@ -19,6 +29,25 @@ static inline void arch_unmap(struct mm_struct *mm,
struct vm_area_struct *vma,
unsigned long start, unsigned long end)
{
+#ifdef CONFIG_GENERIC_VDSO
+ if (start <= mm->context.vdso && mm->context.vdso < end)
+ mm->context.vdso = 0;
+#endif /* CONFIG_GENERIC_VDSO */
+}
+
+static inline void arch_remap(struct mm_struct *mm,
+ unsigned long old_start, unsigned long old_end,
+ unsigned long new_start, unsigned long new_end)
+{
+#ifdef CONFIG_GENERIC_VDSO
+ /*
+ * mremap() doesn't allow moving multiple vmas so we can limit the
+ * check to old_addr == vdso.
+ */
+ if (old_addr == mm->context.vdso)
+ mm->context.vdso = new_addr;
+
+#endif /* CONFIG_GENERIC_VDSO */
}
static inline void arch_bprm_mm_init(struct mm_struct *mm,
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Christopher Covington <cov@codeaurora.org>
To: criu@openvz.org, Will Deacon <will.deacon@arm.com>,
linux-mm@kvack.org, Laurent Dufour <ldufour@linux.vnet.ibm.com>
Cc: Christopher Covington <cov@codeaurora.org>,
Arnd Bergmann <arnd@arndb.de>,
linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC v2 1/7] mm: Provide generic VDSO unmap and remap functions
Date: Tue, 1 Nov 2016 11:10:55 -0600 [thread overview]
Message-ID: <20161101171101.24704-1-cov@codeaurora.org> (raw)
Message-ID: <20161101171055.tE0QKfdBbJtyvKplKLpjoYvkIiWneCFZ3wdPF3EVgWY@z> (raw)
When Address Space Layout Randomization (ASLR, randmaps) is enabled, the
address of the VDSO fluctuates from one process to the next. If
Checkpoint/Restore In Userspace (CRIU) is to fully replicate the memory map
of a previous process, it must be able to remap the VDSO of a new process
to the address used by the previous process. Historically this has been
implemented in architecture-specific code for PowerPC and x86. In order to
support 32-bit and 64-bit ARM without further duplication of code, copy
Laurent Dufour's implementation for PowerPC with slight modifications to a
generic location. This is hopefully the beginning of a long process of VDSO
code de-duplication between architectures.
Signed-off-by: Christopher Covington <cov@codeaurora.org>
---
include/asm-generic/mm_hooks.h | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
diff --git a/include/asm-generic/mm_hooks.h b/include/asm-generic/mm_hooks.h
index cc5d9a1..73f09f1 100644
--- a/include/asm-generic/mm_hooks.h
+++ b/include/asm-generic/mm_hooks.h
@@ -1,7 +1,17 @@
/*
- * Define generic no-op hooks for arch_dup_mmap, arch_exit_mmap
- * and arch_unmap to be included in asm-FOO/mmu_context.h for any
- * arch FOO which doesn't need to hook these.
+ * Define generic hooks for arch_dup_mmap, arch_exit_mmap and arch_unmap to be
+ * included in asm-FOO/mmu_context.h for any arch FOO which doesn't need to
+ * specially hook these.
+ *
+ * arch_remap originally from include/linux-mm-arch-hooks.h
+ * arch_unmap originally from arch/powerpc/include/asm/mmu_context.h
+ * Copyright (C) 2015, IBM Corporation
+ * Author: Laurent Dufour <ldufour@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
*/
#ifndef _ASM_GENERIC_MM_HOOKS_H
#define _ASM_GENERIC_MM_HOOKS_H
@@ -19,6 +29,25 @@ static inline void arch_unmap(struct mm_struct *mm,
struct vm_area_struct *vma,
unsigned long start, unsigned long end)
{
+#ifdef CONFIG_GENERIC_VDSO
+ if (start <= mm->context.vdso && mm->context.vdso < end)
+ mm->context.vdso = 0;
+#endif /* CONFIG_GENERIC_VDSO */
+}
+
+static inline void arch_remap(struct mm_struct *mm,
+ unsigned long old_start, unsigned long old_end,
+ unsigned long new_start, unsigned long new_end)
+{
+#ifdef CONFIG_GENERIC_VDSO
+ /*
+ * mremap() doesn't allow moving multiple vmas so we can limit the
+ * check to old_addr == vdso.
+ */
+ if (old_addr == mm->context.vdso)
+ mm->context.vdso = new_addr;
+
+#endif /* CONFIG_GENERIC_VDSO */
}
static inline void arch_bprm_mm_init(struct mm_struct *mm,
--
Qualcomm Datacenter Technologies as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the
Code Aurora Forum, a Linux Foundation Collaborative Project.
next reply other threads:[~2016-11-01 17:10 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-01 17:10 Christopher Covington [this message]
2016-11-01 17:10 ` [RFC v2 1/7] mm: Provide generic VDSO unmap and remap functions Christopher Covington
2016-11-01 17:10 ` [RFC v2 2/7] arm: Use generic VDSO unmap and remap Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:18 ` Russell King - ARM Linux
2016-11-01 17:18 ` Russell King - ARM Linux
2016-11-01 17:18 ` Russell King - ARM Linux
2016-11-01 17:10 ` [RFC v2 3/7] arm64: Use unsigned long for VDSO Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:10 ` [RFC v2 4/7] arm64: Use generic VDSO unmap and remap functions Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-01 17:10 ` [RFC v2 5/7] powerpc: Rename context.vdso_base to context.vdso Christopher Covington
2016-11-01 17:10 ` Christopher Covington
2016-11-04 4:58 ` Michael Ellerman
2016-11-04 4:58 ` Michael Ellerman
2016-11-04 20:13 ` Will Deacon
2016-11-04 20:13 ` Will Deacon
2016-11-07 8:01 ` Michael Ellerman
2016-11-07 8:01 ` Michael Ellerman
2016-11-01 17:11 ` [RFC v2 6/7] mm/powerpc: Use generic VDSO remap and unmap functions Christopher Covington
2016-11-01 17:11 ` Christopher Covington
2016-11-04 4:59 ` Michael Ellerman
2016-11-04 4:59 ` Michael Ellerman
2016-11-07 20:20 ` Laurent Dufour
2016-11-07 20:20 ` Laurent Dufour
2016-11-07 23:51 ` Michael Ellerman
2016-11-07 23:51 ` Michael Ellerman
2016-11-01 17:11 ` [RFC v2 7/7] mm: Remove mm-arch-hooks.h Christopher Covington
2016-11-01 17:11 ` Christopher Covington
2016-11-01 17:11 ` Christopher Covington
2016-11-01 17:11 ` Christopher Covington
2016-11-01 17:11 ` Christopher Covington
2016-11-01 17:23 ` [RFC v2 1/7] mm: Provide generic VDSO unmap and remap functions Dmitry Safonov
2016-11-01 17:23 ` Dmitry Safonov
2016-11-02 0:23 ` Christopher Covington
2016-11-02 0:23 ` Christopher Covington
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=20161101171101.24704-1-cov@codeaurora.org \
--to=cov@codeaurora.org \
--cc=arnd@arndb.de \
--cc=criu@openvz.org \
--cc=ldufour@linux.vnet.ibm.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--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.