On Friday 04 February 2005 07:21, Zoltan NAGY wrote:
> Jeff Dike wrote:
> >How about some more details?
>
> here it goes...
>
> the program I'm tring to debug is at http://nagyz.nefty.hu/uml/
> I start the guest:
> [EMAIL PROTECTED]:~/uml$ linux/vmlinux ubd0=root mem=256M con0=null,fd:2
> con1=fd:0,fd:1 eth0=tuntap,,,192.168.1.1
> Checking for /proc/mm...found
> Checking for the skas3 patch in the host...found
> Checking PROT_EXEC mmap in /tmp...OK
> Linux version 2.6.11-rc3 ([EMAIL PROTECTED]) (gcc version 3.3.5 (Debian
> 1:3.3.5-8)) #1 Thu Feb 3 20:28:14 CET 2005
> This GDB was configured as "i386-linux"...Using host libthread_db
> library "/lib/libthread_db.so.1".
No TLS it seems, luckily.
> (gdb) r
> Starting program: /root/t/test
> ssh stops.. having a look at the guest's main window... it blowed!
> kernel BUG at mm/memory.c:891!
> Kernel panic - not syncing: BUG!
> Call Trace:
> 1724fa40: [<08086f2d>] notifier_call_chain+0x2d/0x50
> 1724fa60: [<080787b2>] panic+0x72/0x120
> 1724fa80: [<080a394b>] get_user_pages+0x15b/0x370
> 1724fab0: [<08081ad0>] access_process_vm+0x90/0x1b0
> 1724fb00: [<0805d29a>] sys_ptrace+0x11a/0x580
> 1724fb20: [<080601b8>] handle_page_fault+0x168/0x200
> 1724fb60: [<08060380>] segv+0x90/0x280
> 1724fba0: [<08062b3a>] execute_syscall_skas+0xaa/0xb0
> 1724fc10: [<0805f219>] record_syscall_start+0x59/0x70
> 1724fc30: [<08062b78>] handle_syscall+0x38/0x70
> 1724fc50: [<08061c1a>] handle_trap+0x2a/0x130
> 1724fc60: [<08072201>] save_registers+0x41/0x80
> 1724fc80: [<08062151>] userspace+0x231/0x240
> 1724fcd0: [<08063026>] force_flush_all_skas+0x36/0x40
> 1724fcf0: [<080627f3>] fork_handler+0xb3/0xd0
>
> that's all...
>
> I could not get more info out of it.. but I'd like to know if there's
> anything more I could do to help.
What's the status of CONFIG_3_LEVEL_PGTABLES? I'm asking because the BUG'ing
line reads like this:
get_user_pages(...)
...
BUG_ON(pgd_none(*pgd));
pud = pud_offset(pgd, pg);
BUG_ON(pud_none(*pud));
pmd = pmd_offset(pud, pg);
BUG_ON(pmd_none(*pmd)); //this IS line 891.
pte = pte_offset_map(pmd, pg);
BUG_ON(pte_none(*pte));
From my patchlist, I'm going to choose a patch which changes somethings which
actually relate to this bug... if it does not work, then retest both by
enabling and disablign the above CONFIG_ option.
Hope this helps!
--
Paolo Giarrusso, aka Blaisorblade
Linux registered user n. 292729
http://www.user-mode-linux.org/~blaisorblade
From: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>, Jeff Dike <[EMAIL PROTECTED]>
The previous ifdef to check whether to use the host's vsyscall page
was buggy. This bug can cause crashes.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
---
linux-2.6.11-paolo/arch/um/Kconfig_i386 | 4 ++++
linux-2.6.11-paolo/arch/um/Kconfig_x86_64 | 4 ++++
linux-2.6.11-paolo/arch/um/kernel/mem.c | 12 ++++++++----
3 files changed, 16 insertions(+), 4 deletions(-)
diff -puN arch/um/Kconfig_i386~uml-vsyscall arch/um/Kconfig_i386
--- linux-2.6.11/arch/um/Kconfig_i386~uml-vsyscall 2005-02-04 06:22:14.731673232 +0100
+++ linux-2.6.11-paolo/arch/um/Kconfig_i386 2005-02-04 06:22:14.738672168 +0100
@@ -18,3 +18,7 @@ config 3_LEVEL_PGTABLES
config ARCH_HAS_SC_SIGNALS
bool
default y
+
+config ARCH_REUSE_HOST_VSYSCALL_AREA
+ bool
+ default y
diff -puN arch/um/Kconfig_x86_64~uml-vsyscall arch/um/Kconfig_x86_64
--- linux-2.6.11/arch/um/Kconfig_x86_64~uml-vsyscall 2005-02-04 06:22:14.733672928 +0100
+++ linux-2.6.11-paolo/arch/um/Kconfig_x86_64 2005-02-04 06:22:14.739672016 +0100
@@ -9,3 +9,7 @@ config 3_LEVEL_PGTABLES
config ARCH_HAS_SC_SIGNALS
bool
default n
+
+config ARCH_REUSE_HOST_VSYSCALL_AREA
+ bool
+ default n
diff -puN arch/um/kernel/mem.c~uml-vsyscall arch/um/kernel/mem.c
--- linux-2.6.11/arch/um/kernel/mem.c~uml-vsyscall 2005-02-04 06:22:14.735672624 +0100
+++ linux-2.6.11-paolo/arch/um/kernel/mem.c 2005-02-04 06:22:14.739672016 +0100
@@ -152,6 +152,7 @@ void __init kmap_init(void)
static void init_highmem(void)
{
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
unsigned long vaddr;
@@ -163,7 +164,8 @@ static void init_highmem(void)
fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, swapper_pg_dir);
pgd = swapper_pg_dir + pgd_index(vaddr);
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ pmd = pmd_offset(pud, vaddr);
pte = pte_offset_kernel(pmd, vaddr);
pkmap_page_table = pte;
@@ -173,9 +175,10 @@ static void init_highmem(void)
static void __init fixaddr_user_init( void)
{
-#if FIXADDR_USER_START != 0
+#if CONFIG_ARCH_REUSE_HOST_VSYSCALL_AREA
long size = FIXADDR_USER_END - FIXADDR_USER_START;
pgd_t *pgd;
+ pud_t *pud;
pmd_t *pmd;
pte_t *pte;
unsigned long paddr, vaddr = FIXADDR_USER_START;
@@ -187,9 +190,10 @@ static void __init fixaddr_user_init( vo
paddr = (unsigned long)alloc_bootmem_low_pages( size);
memcpy( (void *)paddr, (void *)FIXADDR_USER_START, size);
paddr = __pa(paddr);
- for ( ; size > 0; size-=PAGE_SIZE, vaddr+=PAGE_SIZE, paddr+=PAGE_SIZE) {
+ for ( ; size > 0; size-=PAGE_SIZE, vaddr+=PAGE_SIZE, paddr+=PAGE_SIZE){
pgd = swapper_pg_dir + pgd_index(vaddr);
- pmd = pmd_offset(pgd, vaddr);
+ pud = pud_offset(pgd, vaddr);
+ pmd = pmd_offset(pud, vaddr);
pte = pte_offset_kernel(pmd, vaddr);
pte_set_val( (*pte), paddr, PAGE_READONLY);
}
_