All of lore.kernel.org
 help / color / mirror / Atom feed
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v7 8/9] ARM: vdso initialization, mapping, and synchronization
Date: Wed, 2 Jul 2014 15:40:50 +0100	[thread overview]
Message-ID: <20140702144050.GD24879@arm.com> (raw)
In-Reply-To: <CALCETrWeTeeuz4vW6wrhtDrdg54O-hhFbspfKEEunRZ0zf7ZBg@mail.gmail.com>

Hi Andy,

On Tue, Jul 01, 2014 at 03:17:23PM +0100, Andy Lutomirski wrote:
> On Tue, Jul 1, 2014 at 7:15 AM, Will Deacon <will.deacon@arm.com> wrote:
> > On Tue, Jul 01, 2014 at 03:11:04PM +0100, Nathan Lynch wrote:
> >> I believe Andy is suggesting separate VMAs (with different VM flags) for
> >> the VDSO's data and code.  So, breakpoints in code would work, but
> >> attempts to modify the data page via ptrace() would fail outright
> >> instead of silently COWing.
> >
> > Ah, yes. That makes a lot of sense for the data page -- we should do
> > something similar on arm64 too, since the CoW will break everything for the
> > task being debugged. We could also drop the EXEC flags too.
> 
> If you do this, I have a slight preference for the new vma being
> called "[vvar]" to match x86.  It'll make the CRIU people happy if and
> when they port it to ARM.

I quickly hacked something (see below) and now I see the following in
/proc/$$/maps:

7fa1574000-7fa1575000 r-xp 00000000 00:00 0                              [vdso]
7fa1575000-7fa1576000 r--p 00000000 00:00 0                              [vvar]

Is that what you're after?

Will

--->8

diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
index 50384fec56c4..84cafbc3eb54 100644
--- a/arch/arm64/kernel/vdso.c
+++ b/arch/arm64/kernel/vdso.c
@@ -138,11 +138,12 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
 				int uses_interp)
 {
 	struct mm_struct *mm = current->mm;
-	unsigned long vdso_base, vdso_mapping_len;
+	unsigned long vdso_base, vdso_text_len, vdso_mapping_len;
 	int ret;
 
+	vdso_text_len = vdso_pages << PAGE_SHIFT;
 	/* Be sure to map the data page */
-	vdso_mapping_len = (vdso_pages + 1) << PAGE_SHIFT;
+	vdso_mapping_len = vdso_text_len + PAGE_SIZE;
 
 	down_write(&mm->mmap_sem);
 	vdso_base = get_unmapped_area(NULL, 0, vdso_mapping_len, 0, 0);
@@ -152,35 +153,52 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
 	}
 	mm->context.vdso = (void *)vdso_base;
 
-	ret = install_special_mapping(mm, vdso_base, vdso_mapping_len,
+	ret = install_special_mapping(mm, vdso_base, vdso_text_len,
 				      VM_READ|VM_EXEC|
 				      VM_MAYREAD|VM_MAYWRITE|VM_MAYEXEC,
 				      vdso_pagelist);
-	if (ret) {
-		mm->context.vdso = NULL;
+	if (ret)
+		goto up_fail;
+
+	vdso_base += vdso_text_len;
+	ret = install_special_mapping(mm, vdso_base, PAGE_SIZE,
+				      VM_READ|VM_MAYREAD,
+				      vdso_pagelist + vdso_pages);
+	if (ret)
 		goto up_fail;
-	}
 
-up_fail:
 	up_write(&mm->mmap_sem);
+	return 0;
 
+up_fail:
+	mm->context.vdso = NULL;
+	up_write(&mm->mmap_sem);
 	return ret;
 }
 
 const char *arch_vma_name(struct vm_area_struct *vma)
 {
+	unsigned long vdso_text;
+
+	if (!vma->vm_mm)
+		return NULL;
+
+	vdso_text = (unsigned long)vma->vm_mm->context.vdso;
+
 	/*
 	 * We can re-use the vdso pointer in mm_context_t for identifying
 	 * the vectors page for compat applications. The vDSO will always
 	 * sit above TASK_UNMAPPED_BASE and so we don't need to worry about
 	 * it conflicting with the vectors base.
 	 */
-	if (vma->vm_mm && vma->vm_start == (long)vma->vm_mm->context.vdso) {
+	if (vma->vm_start == vdso_text) {
 #ifdef CONFIG_COMPAT
 		if (vma->vm_start == AARCH32_VECTORS_BASE)
 			return "[vectors]";
 #endif
 		return "[vdso]";
+	} else if (vma->vm_start == (vdso_text + (vdso_pages << PAGE_SHIFT))) {
+		return "[vvar]";
 	}
 
 	return NULL;

  parent reply	other threads:[~2014-07-02 14:40 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-23  3:11 [PATCH v7 0/9] ARM: VDSO Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 1/9] clocksource: arm_arch_timer: change clocksource name if CP15 unavailable Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 2/9] clocksource: arm_arch_timer: enable counter access for 32-bit ARM Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 3/9] ARM: arch_timer: remove unused functions Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 4/9] arm64: " Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 5/9] ARM: place sigpage at a random offset above stack Nathan Lynch
2014-06-23  3:11 ` [PATCH v7 6/9] ARM: miscellaneous vdso infrastructure, preparation Nathan Lynch
2014-06-30 10:11   ` Arnd Bergmann
2014-06-30 12:27     ` Nathan Lynch
2014-06-30 13:06       ` Arnd Bergmann
2014-06-23  3:11 ` [PATCH v7 7/9] ARM: add vdso user-space code Nathan Lynch
2014-06-28  9:53   ` Russell King - ARM Linux
2014-06-28 10:03     ` Russell King - ARM Linux
2014-06-30 15:56       ` Andy Lutomirski
2014-06-28 15:19     ` Nathan Lynch
2014-06-28 15:26   ` Russell King - ARM Linux
2014-06-28 16:13     ` Nathan Lynch
2014-06-28 18:12       ` Russell King - ARM Linux
2014-06-28 19:45         ` Nathan Lynch
2014-06-28 20:11           ` Russell King - ARM Linux
2014-06-28 21:35             ` Nathan Lynch
2014-06-29  8:34               ` Russell King - ARM Linux
2014-06-29 15:48                 ` Nathan Lynch
2014-06-29 16:07                   ` Russell King - ARM Linux
2014-06-29 23:04                     ` Nathan Lynch
2014-06-30 21:33                     ` Andy Lutomirski
2014-06-30 15:59     ` Andy Lutomirski
2014-06-30 16:50       ` Nathan Lynch
2014-06-30 21:29   ` Andy Lutomirski
2014-07-01  9:00     ` Will Deacon
2014-07-01 13:34       ` Nathan Lynch
2014-07-01 14:11         ` Andy Lutomirski
2014-07-01 13:28     ` Nathan Lynch
2014-07-01 14:56       ` Andy Lutomirski
2014-06-23  3:11 ` [PATCH v7 8/9] ARM: vdso initialization, mapping, and synchronization Nathan Lynch
2014-06-30 21:37   ` Andy Lutomirski
2014-07-01  9:03     ` Will Deacon
2014-07-01 14:11       ` Nathan Lynch
2014-07-01 14:15         ` Will Deacon
2014-07-01 14:17           ` Andy Lutomirski
2014-07-01 17:27             ` Christopher Covington
2014-07-02 14:40             ` Will Deacon [this message]
2014-07-02 15:54               ` Andy Lutomirski
2014-07-02 16:18                 ` Nathan Lynch
2014-07-02 16:27                   ` Will Deacon
2014-07-02 16:47                     ` Andy Lutomirski
2014-07-02 17:24                       ` Will Deacon
2014-07-02 18:34                         ` Andy Lutomirski
2014-07-02 18:54                           ` Will Deacon
2014-07-22  0:14                             ` Andy Lutomirski
2014-07-22  8:13                               ` Will Deacon
2014-07-01 14:01     ` Nathan Lynch
2014-07-01 14:09       ` Andy Lutomirski
2014-07-01 14:14         ` Russell King - ARM Linux
2014-06-23  3:11 ` [PATCH v7 9/9] ARM: add CONFIG_VDSO Kconfig and Makefile bits Nathan Lynch
2014-06-27  8:51 ` [PATCH v7 0/9] ARM: VDSO Jan Glauber
2014-06-27  8:57   ` Russell King - ARM Linux
2014-06-27  9:41     ` Ard Biesheuvel
2014-06-27  9:46       ` Russell King - ARM Linux
2014-06-27 17:01         ` Nathan Lynch
2014-06-28  9:42           ` Russell King - ARM Linux
2014-06-28  9:55             ` Russell King - ARM Linux
2014-06-28 14:49               ` Russell King - ARM Linux
2014-06-30  7:27                 ` Arnd Bergmann
2014-06-30  7:43             ` Arnd Bergmann
2014-06-30 18:27               ` Nathan Lynch
2014-06-27 16:00   ` Nathan Lynch
2014-06-30 16:03   ` Andy Lutomirski
2014-06-30  8:12 ` Ard Biesheuvel
2014-07-01 16:34   ` Nathan Lynch
2014-07-01 20:08     ` Ard Biesheuvel
2014-07-01 22:44       ` Russell King - ARM Linux
2014-06-30 14:40 ` Will Deacon
2014-06-30 15:42   ` Nathan Lynch
2014-06-30 21:56     ` Andy Lutomirski
2014-07-01  9:04       ` Will Deacon

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=20140702144050.GD24879@arm.com \
    --to=will.deacon@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.