All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page
@ 2018-01-30  6:42 Jia Zhang
  2018-01-30  6:42 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Jia Zhang @ 2018-01-30  6:42 UTC (permalink / raw)
  To: tglx, mingo, hpa; +Cc: x86, linux-kernel, Jia Zhang

The commit df04abfd181a
("fs/proc/kcore.c: Add bounce buffer for ktext data") introduces a
bounce buffer to work around CONFIG_HARDENED_USERCOPY=y. However,
accessing vsyscall user page will cause SMAP violation in this way.

In order to fix this issue, simply replace memcpy() with copy_from_user()
may work, but using a common way to handle this sort of user page may be
useful for future.

Currently, only vsyscall page requires KCORE_USER.

Signed-off-by: Jia Zhang <zhang.jia@linux.alibaba.com>
---
 arch/x86/mm/init_64.c | 2 +-
 fs/proc/kcore.c       | 4 ++++
 include/linux/kcore.h | 1 +
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 4a83728..dab78f6 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1187,7 +1187,7 @@ void __init mem_init(void)
 
 	/* Register memory areas for /proc/kcore */
 	kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
-			 PAGE_SIZE, KCORE_OTHER);
+		   PAGE_SIZE, KCORE_USER);
 
 	mem_init_print_info(NULL);
 }
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
index 4bc85cb..e4b0204 100644
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -510,6 +510,10 @@ static void elf_kcore_store_hdr(char *bufp, int nphdr, int dataoff)
 			/* we have to zero-fill user buffer even if no read */
 			if (copy_to_user(buffer, buf, tsz))
 				return -EFAULT;
+		} else if (m->type == KCORE_USER) {
+			/* user page is handled prior to normal kernel page */
+			if (copy_to_user(buffer, (char *)start, tsz))
+				return -EFAULT;
 		} else {
 			if (kern_addr_valid(start)) {
 				unsigned long n;
diff --git a/include/linux/kcore.h b/include/linux/kcore.h
index 7ff25a8..80db19d 100644
--- a/include/linux/kcore.h
+++ b/include/linux/kcore.h
@@ -10,6 +10,7 @@ enum kcore_type {
 	KCORE_VMALLOC,
 	KCORE_RAM,
 	KCORE_VMEMMAP,
+	KCORE_USER,
 	KCORE_OTHER,
 };
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread
* [PATCH v2 0/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page
@ 2018-02-12 14:44 Jia Zhang
  2018-02-12 14:44 ` [PATCH 1/2] " Jia Zhang
  0 siblings, 1 reply; 8+ messages in thread
From: Jia Zhang @ 2018-02-12 14:44 UTC (permalink / raw)
  To: tglx, jolsa, mingo, hpa; +Cc: x86, linux-kernel

This patchset was validated with the combinations of pti=on/off and vsyscall=native/emulate/none.
In addition, CONFIG_HARDENED_USERCOPY is always enabled.

v2:
  - Use { } around kclist_add() when there's more than 1 line code 

Jia Zhang (2):
      /proc/kcore: Fix SMAP violation when dumping vsyscall user page
      x86/mm/64: Add vsyscall page to /proc/kcore conditionally

 arch/x86/mm/init_64.c | 6 ++++--
 fs/proc/kcore.c       | 4 ++++
 include/linux/kcore.h | 1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

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

end of thread, other threads:[~2018-02-12 14:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-30  6:42 [PATCH 1/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page Jia Zhang
2018-01-30  6:42 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
2018-02-05  9:26   ` Jiri Olsa
2018-02-09  1:08     ` Jia Zhang
2018-02-12  9:59       ` Thomas Gleixner
2018-02-01  1:03 ` [PATCH 1/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page Jia Zhang
2018-02-05  1:32 ` Jia Zhang
2018-02-12 14:44 [PATCH v2 0/2] " Jia Zhang
2018-02-12 14:44 ` [PATCH 1/2] " Jia Zhang

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.