* [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
2018-02-12 14:44 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
0 siblings, 2 replies; 5+ 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] 5+ messages in thread
* [PATCH 1/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page
2018-02-12 14:44 [PATCH v2 0/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page Jia Zhang
@ 2018-02-12 14:44 ` Jia Zhang
2018-02-13 9:07 ` [tip:x86/urgent] vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault " tip-bot for Jia Zhang
2018-02-12 14:44 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
1 sibling, 1 reply; 5+ messages in thread
From: Jia Zhang @ 2018-02-12 14:44 UTC (permalink / raw)
To: tglx, jolsa, mingo, hpa; +Cc: x86, linux-kernel
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>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
---
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 1ab42c8..14cd7f8 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1194,7 +1194,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 e8a93bc..7d8fa05 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)) {
/*
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] 5+ messages in thread
* [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally
2018-02-12 14:44 [PATCH v2 0/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page Jia Zhang
2018-02-12 14:44 ` [PATCH 1/2] " Jia Zhang
@ 2018-02-12 14:44 ` Jia Zhang
2018-02-13 9:08 ` [tip:x86/urgent] x86/mm/kcore: " tip-bot for Jia Zhang
1 sibling, 1 reply; 5+ messages in thread
From: Jia Zhang @ 2018-02-12 14:44 UTC (permalink / raw)
To: tglx, jolsa, mingo, hpa; +Cc: x86, linux-kernel
The vsyscall page should be visible only if
vsyscall=emulate/native when dumping /proc/kcore.
Signed-off-by: Jia Zhang <zhang.jia@linux.alibaba.com>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
---
arch/x86/mm/init_64.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 14cd7f8..cbd6ea4 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1193,8 +1193,10 @@ void __init mem_init(void)
register_page_bootmem_info();
/* Register memory areas for /proc/kcore */
- kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
- PAGE_SIZE, KCORE_USER);
+ if (get_gate_vma(&init_mm)) {
+ kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
+ PAGE_SIZE, KCORE_USER);
+ }
mem_init_print_info(NULL);
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [tip:x86/urgent] vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault when dumping vsyscall user page
2018-02-12 14:44 ` [PATCH 1/2] " Jia Zhang
@ 2018-02-13 9:07 ` tip-bot for Jia Zhang
0 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Jia Zhang @ 2018-02-13 9:07 UTC (permalink / raw)
To: linux-tip-commits
Cc: torvalds, hpa, linux-kernel, jolsa, mingo, zhang.jia, tglx,
peterz, viro
Commit-ID: 595dd46ebfc10be041a365d0a3fa99df50b6ba73
Gitweb: https://git.kernel.org/tip/595dd46ebfc10be041a365d0a3fa99df50b6ba73
Author: Jia Zhang <zhang.jia@linux.alibaba.com>
AuthorDate: Mon, 12 Feb 2018 22:44:53 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 13 Feb 2018 09:15:58 +0100
vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault when dumping vsyscall user page
Commit:
df04abfd181a ("fs/proc/kcore.c: Add bounce buffer for ktext data")
... introduced a bounce buffer to work around CONFIG_HARDENED_USERCOPY=y.
However, accessing the vsyscall user page will cause an SMAP fault.
Replace memcpy() with copy_from_user() to fix this bug works, but adding
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>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: jolsa@redhat.com
Link: http://lkml.kernel.org/r/1518446694-21124-2-git-send-email-zhang.jia@linux.alibaba.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init_64.c | 3 +--
fs/proc/kcore.c | 4 ++++
include/linux/kcore.h | 1 +
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 1ab42c8..6aa33d1 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1193,8 +1193,7 @@ void __init mem_init(void)
register_page_bootmem_info();
/* Register memory areas for /proc/kcore */
- kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR,
- PAGE_SIZE, KCORE_OTHER);
+ kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR, PAGE_SIZE, KCORE_USER);
mem_init_print_info(NULL);
}
diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
index e8a93bc..d1e8276 100644
--- a/fs/proc/kcore.c
+++ b/fs/proc/kcore.c
@@ -510,6 +510,10 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
/* 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)) {
/*
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,
};
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [tip:x86/urgent] x86/mm/kcore: Add vsyscall page to /proc/kcore conditionally
2018-02-12 14:44 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
@ 2018-02-13 9:08 ` tip-bot for Jia Zhang
0 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Jia Zhang @ 2018-02-13 9:08 UTC (permalink / raw)
To: linux-tip-commits
Cc: jolsa, mingo, hpa, zhang.jia, peterz, tglx, viro, linux-kernel,
torvalds
Commit-ID: cd026ca2861e7f384d677626a483da797c76b9da
Gitweb: https://git.kernel.org/tip/cd026ca2861e7f384d677626a483da797c76b9da
Author: Jia Zhang <zhang.jia@linux.alibaba.com>
AuthorDate: Mon, 12 Feb 2018 22:44:54 +0800
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 13 Feb 2018 09:15:59 +0100
x86/mm/kcore: Add vsyscall page to /proc/kcore conditionally
The vsyscall page should be visible only if vsyscall=emulate/native when dumping /proc/kcore.
Signed-off-by: Jia Zhang <zhang.jia@linux.alibaba.com>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: jolsa@redhat.com
Link: http://lkml.kernel.org/r/1518446694-21124-3-git-send-email-zhang.jia@linux.alibaba.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/mm/init_64.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 6aa33d1..8ba9c31 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1193,7 +1193,8 @@ void __init mem_init(void)
register_page_bootmem_info();
/* Register memory areas for /proc/kcore */
- kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR, PAGE_SIZE, KCORE_USER);
+ if (get_gate_vma(&init_mm))
+ kclist_add(&kcore_vsyscall, (void *)VSYSCALL_ADDR, PAGE_SIZE, KCORE_USER);
mem_init_print_info(NULL);
}
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-02-13 9:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-12 14:44 [PATCH v2 0/2] /proc/kcore: Fix SMAP violation when dumping vsyscall user page Jia Zhang
2018-02-12 14:44 ` [PATCH 1/2] " Jia Zhang
2018-02-13 9:07 ` [tip:x86/urgent] vfs/proc/kcore, x86/mm/kcore: Fix SMAP fault " tip-bot for Jia Zhang
2018-02-12 14:44 ` [PATCH 2/2] x86/mm/64: Add vsyscall page to /proc/kcore conditionally Jia Zhang
2018-02-13 9:08 ` [tip:x86/urgent] x86/mm/kcore: " tip-bot for 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.