public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mm: Fix hiding the stack guard page in proc
@ 2010-08-31 12:59 Stefan Bader
  2010-08-31 13:33 ` Linus Torvalds
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan Bader @ 2010-08-31 12:59 UTC (permalink / raw)
  To: Linux Kernel Mailing List; +Cc: Linus Torvalds

[-- Attachment #1: Type: text/plain, Size: 737 bytes --]

Looking at the other changes I believe that the logic for proc also needs to
look at the previous vma to decide whether to hide the first page of it or not.
The following patch against current head should fix that (only compile tested here .
I only made the change to task_mmu.c here. But basically its the same check as
in mlock.c. Maybe its would be worth moving the inlines to mm.h.

-Stefan

Current output before:
...
b778e000-b7790000 rw-p 00000000 00:00 0
bfdc8000-bfddd000 rw-p 00000000 00:00 0          [stack]

After mlocking parts of the stack:
...
b778d000-b7790000 rw-p 00000000 00:00 0
bfdc8000-bfdda000 rw-p 00000000 00:00 0
bfddb000-bfddb000 rw-p 00000000 00:00 0          [stack]
bfddc000-bfddd000 rw-p 00000000 00:00 0

[-- Attachment #2: 0001-mm-Fix-hiding-the-stack-guard-page-in-proc.patch --]
[-- Type: text/x-diff, Size: 1411 bytes --]

>From baa30fb2027096d6604c9f0ba2bad04a30edc482 Mon Sep 17 00:00:00 2001
From: Stefan Bader <stefan.bader@canonical.com>
Date: Tue, 31 Aug 2010 13:59:58 +0200
Subject: [PATCH] mm: Fix hiding the stack guard page in proc

Commit d7824370e26325c881b665350ce64fb0a4fde24a tried to hide the stack
guard page from user-space by adapting mlock and hiding it in /proc.
Commit 7798330ac8114c731cfab83e634c6ecedaa233d7 fixed the mlock part,
using the newly added double linked vma lists.
Still the proc change would hide the first page of each stack vma which
would be wrong for those vmas that are just continuations of the stack
after its vma has been split.

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Cc: stable@kernel.org
---
 fs/proc/task_mmu.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 439fc1f..2e302b4 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -224,7 +224,9 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
 	/* We don't show the stack guard page in /proc/maps */
 	start = vma->vm_start;
 	if (vma->vm_flags & VM_GROWSDOWN)
-		start += PAGE_SIZE;
+		if (!vma->vm_prev || vma->vm_prev->vm_flags != VM_GROWSDOWN ||
+		    vma->vm_start != vma->vm_prev->vm_end)
+			start += PAGE_SIZE;
 
 	seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
 			start,
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm: Fix hiding the stack guard page in proc
  2010-08-31 12:59 [PATCH] mm: Fix hiding the stack guard page in proc Stefan Bader
@ 2010-08-31 13:33 ` Linus Torvalds
  2010-08-31 13:55   ` Stefan Bader
  0 siblings, 1 reply; 3+ messages in thread
From: Linus Torvalds @ 2010-08-31 13:33 UTC (permalink / raw)
  To: Stefan Bader; +Cc: Linux Kernel Mailing List, Linus Torvalds

On Tuesday, August 31, 2010, Stefan Bader <stefan.bader@canonical.com> wrote:
>
> Maybe its would be worth moving the inlines to mm.h.

Yes, I think it would be a good idea to try to abstract it out a bit...

       Linus

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] mm: Fix hiding the stack guard page in proc
  2010-08-31 13:33 ` Linus Torvalds
@ 2010-08-31 13:55   ` Stefan Bader
  0 siblings, 0 replies; 3+ messages in thread
From: Stefan Bader @ 2010-08-31 13:55 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Linux Kernel Mailing List

[-- Attachment #1: Type: text/plain, Size: 325 bytes --]

On 08/31/2010 03:33 PM, Linus Torvalds wrote:
> On Tuesday, August 31, 2010, Stefan Bader <stefan.bader@canonical.com> wrote:
>>
>> Maybe its would be worth moving the inlines to mm.h.
> 
> Yes, I think it would be a good idea to try to abstract it out a bit...
> 
>        Linus

Quick and dirty (and very untested)

Stefan

[-- Attachment #2: 0002-mm-Move-vma_stack_continue-into-mm.h.patch --]
[-- Type: text/x-diff, Size: 2324 bytes --]

>From 33f7a4a8d572628dd82c8953d434b2806a1c448e Mon Sep 17 00:00:00 2001
From: Stefan Bader <stefan.bader@canonical.com>
Date: Tue, 31 Aug 2010 15:52:27 +0200
Subject: [PATCH] mm: Move vma_stack_continue into mm.h

So it can be used by all that need to check for that.

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
---
 fs/proc/task_mmu.c |    3 +--
 include/linux/mm.h |    7 +++++++
 mm/mlock.c         |    6 ------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 2e302b4..ac0101a 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -224,8 +224,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
 	/* We don't show the stack guard page in /proc/maps */
 	start = vma->vm_start;
 	if (vma->vm_flags & VM_GROWSDOWN)
-		if (!vma->vm_prev || vma->vm_prev->vm_flags != VM_GROWSDOWN ||
-		    vma->vm_start != vma->vm_prev->vm_end)
+		if(!vma_stack_continue(vma->vm_prev, vma->vm_start))
 			start += PAGE_SIZE;
 
 	seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
diff --git a/include/linux/mm.h b/include/linux/mm.h
index e6b1210..4f4773a 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -864,6 +864,13 @@ int set_page_dirty(struct page *page);
 int set_page_dirty_lock(struct page *page);
 int clear_page_dirty_for_io(struct page *page);
 
+/* Is the vma a continuation of the stack vma above it? */
+static inline int vma_stack_continue(struct vm_area_struct *vma,
+				     unsigned long addr)
+{
+	return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
+}
+
 extern unsigned long move_page_tables(struct vm_area_struct *vma,
 		unsigned long old_addr, struct vm_area_struct *new_vma,
 		unsigned long new_addr, unsigned long len);
diff --git a/mm/mlock.c b/mm/mlock.c
index cbae7c5..b70919c 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -135,12 +135,6 @@ void munlock_vma_page(struct page *page)
 	}
 }
 
-/* Is the vma a continuation of the stack vma above it? */
-static inline int vma_stack_continue(struct vm_area_struct *vma, unsigned long addr)
-{
-	return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
-}
-
 static inline int stack_guard_page(struct vm_area_struct *vma, unsigned long addr)
 {
 	return (vma->vm_flags & VM_GROWSDOWN) &&
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-08-31 13:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-31 12:59 [PATCH] mm: Fix hiding the stack guard page in proc Stefan Bader
2010-08-31 13:33 ` Linus Torvalds
2010-08-31 13:55   ` Stefan Bader

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox