Wu Fengguang
36e15263aa
kcore: add _text to KCORE_TEXT
Extend KCORE_TEXT to cover the pages between _text and _stext, to allow
examining some important page table pages.
`readelf -a` output on x86_64 before and after patch:
Type Offset VirtAddr PhysAddr
before LOAD 0x00007fff8100c000 0xffffffff81009000 0x0000000000000000
after LOAD 0x00007fff81003000 0xffffffff81000000 0x0000000000000000
The newly covered pages are:
0xffffffff81000000 <startup_64> etc.
0xffffffff81001000 <init_level4_pgt>
0xffffffff81002000 <level3_ident_pgt>
0xffffffff81003000 <level3_kernel_pgt>
0xffffffff81004000 <level2_fixmap_pgt>
0xffffffff81005000 <level1_fixmap_pgt>
0xffffffff81006000 <level2_ident_pgt>
0xffffffff81007000 <level2_kernel_pgt>
0xffffffff81008000 <level2_spare_pgt>
Before patch, /proc/kcore shows outdated contents for the above page
table pages, for example:
(gdb) p level3_ident_pgt
$1 = {<text variable, no debug info>} 0xffffffff81002000 <level3_ident_pgt>
(gdb) p/x *((pud_t *)&level3_ident_pgt)@512
$2 = {{pud = 0x1006063}, {pud = 0x0} <repeats 511 times>}
while the real content is:
root@hp /home/wfg# hexdump -s 0x1002000 -n 4096 /dev/mem
1002000 6063 0100 0000 0000 8067 0000 0000 0000
1002010 0000 0000 0000 0000 0000 0000 0000 0000
*
1003000
That is, on a x86_64 box with 2GB memory, we can see first-1GB / full-2GB
identity mapping before/after patch:
(gdb) p/x *((pud_t *)&level3_ident_pgt)@512
before $1 = {{pud = 0x1006063}, {pud = 0x0} <repeats 511 times>}
after $1 = {{pud = 0x1006063}, {pud = 0x8067}, {pud = 0x0} <repeats 510 times>}
Obviously the content before patch is wrong.
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
2010-05-27 09:12:47 -07:00 |
| .. |
|
array.c
|
proc: get_nr_threads() doesn't need ->siglock any longer
|
2010-05-27 09:12:47 -07:00 |
|
base.c
|
proc: cleanup: remove unused assignments
|
2010-05-27 09:12:47 -07:00 |
|
cmdline.c
|
proc: switch /proc/cmdline to seq_file
|
2008-10-23 14:29:04 +04:00 |
|
cpuinfo.c
|
proc: move /proc/cpuinfo code to fs/proc/cpuinfo.c
|
2008-10-23 15:05:11 +04:00 |
|
devices.c
|
proc: move /proc/devices code to fs/proc/devices.c
|
2008-10-23 15:02:18 +04:00 |
|
generic.c
|
proc: remove obsolete comments
|
2010-05-27 09:12:47 -07:00 |
|
inode.c
|
Merge branch 'bkl/procfs' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing
|
2010-05-19 17:23:28 -07:00 |
|
internal.h
|
proc: rename de_get() to pde_get() and inline it
|
2009-12-16 07:19:57 -08:00 |
|
interrupts.c
|
proc: move /proc/interrupts boilerplate code to fs/proc/interrupts.c
|
2008-10-23 15:15:46 +04:00 |
|
Kconfig
|
proc: move PROC_PAGE_MONITOR to fs/proc/Kconfig
|
2008-10-10 04:18:57 +04:00 |
|
kcore.c
|
kcore: add _text to KCORE_TEXT
|
2010-05-27 09:12:47 -07:00 |
|
kmsg.c
|
procfs: Use generic_file_llseek in /proc/kmsg
|
2010-04-09 16:35:41 +02:00 |
|
loadavg.c
|
sched, timers: cleanup avenrun users
|
2009-05-15 15:32:45 +02:00 |
|
Makefile
|
proc: export statistics for softirq to /proc
|
2009-06-18 13:03:41 -07:00 |
|
meminfo.c
|
hwpoison: fix/proc/meminfo alignment
|
2009-10-29 07:39:25 -07:00 |
|
mmu.c
|
fs/proc/mmu.c: headers butchery
|
2007-10-17 08:42:48 -07:00 |
|
nommu.c
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
|
2010-03-30 22:02:32 +09:00 |
|
page.c
|
mm: export stable page flags
|
2009-12-16 12:19:59 +01:00 |
|
proc_devtree.c
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
|
2010-03-30 22:02:32 +09:00 |
|
proc_net.c
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
|
2010-03-30 22:02:32 +09:00 |
|
proc_sysctl.c
|
sysctl: Don't look at ctl_name and strategy in the generic code
|
2009-11-11 00:53:43 -08:00 |
|
proc_tty.c
|
proc tty: remove struct tty_operations::read_proc
|
2009-04-01 08:59:10 -07:00 |
|
root.c
|
proc: cleanup: remove unused assignments
|
2010-05-27 09:12:47 -07:00 |
|
softirqs.c
|
proc: export statistics for softirq to /proc
|
2009-06-18 13:03:41 -07:00 |
|
stat.c
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
|
2010-03-30 22:02:32 +09:00 |
|
task_mmu.c
|
pagemap: add #ifdefs CONFIG_HUGETLB_PAGE on code walking hugetlb vma
|
2010-05-25 08:06:58 -07:00 |
|
task_nommu.c
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
|
2010-03-30 22:02:32 +09:00 |
|
uptime.c
|
[PATCH] Fix idle time field in /proc/uptime
|
2009-09-24 10:16:24 +02:00 |
|
version.c
|
proc: switch /proc/version to seq_file
|
2008-10-23 14:19:58 +04:00 |
|
vmcore.c
|
Merge branch 'bkl/procfs' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing
|
2010-05-19 17:23:28 -07:00 |