Vine Linux バグトラッキングシステム - Vine Linux
課題の詳細を表示
0000067Vine Linux1 バグ公開2006-06-15 09:322006-07-29 01:22
anonymous 
 
不明 
完了再現不可 
3.2 
 
x86
kernel
0000067: mm/slab.c にて kmem_cache_reap ,システムが停止します.
> Unable to handle kernel NULL pointer dereference at virtual address 000
> 00000
> > > *pde = 00000000
> > > Oops: 0000
> > > CPU: 1
> > > EIP: 0010:[<c013de10>] Tainted: P
> > > Using defaults from ksymoops -t elf32-i386 -a i386
> > > EFLAGS: 00010013
> > > eax: 00000000 ebx: c282ddb8 ecx: d167dec0 edx: c2835a60
> > > esi: 00000000 edi: 0000004a ebp: c282ddc8 esp: c2843f24
> > > ds: 0018 es: 0018 ss: 0018
> > > Process kswapd (pid: 5, stackpage=c2843000)
> > > Stack: c1f3a640 c2842000 c03639f8 00000000 c2842000 c282ddc0 c2835a60 0
> 0000000
> > > 00000006 00000001 00000003 c282f268 00000020 000001d0 c03639f8 c
> 03639f8
> > > c013f61c c2843f88 000001d0 0000003c 00000020 c013f842 c2843f88 e
> 0092000
> > > Call Trace: [<c013f61c>] [<c013f842>] [<c013fa06>] [<c013fa78>] [<c0
> 13fbce>]
> > > [<c0105000>] [<c01075de>] [<c013fb30>]
> > > Code: 8b 00 47 39 e8 75 f9 8b 73 2c 89 fa 89 f1 d3 e2 8b 4b 4c 85


Trace; c013f61c <shrink_caches+1c/70>
> > Trace; c013f842 <try_to_free_pages_zone+62/100>
> > Trace; c013fa06 <kswapd_balance_pgdat+66/b0>
> > Trace; c013fa78 <kswapd_balance+28/50>
> > Trace; c013fbce <kswapd+9e/cd>
> > Trace; c0105000 <_stext+0/0>
> > Trace; c01075de <arch_kernel_thread+2e/40>
> > Trace; c013fb30 <kswapd+0/cd>
> >
> > Code; c013de10 <kmem_cache_reap+150/3b0>
> > 00000000 <_EIP>:
> > Code; c013de10 <kmem_cache_reap+150/3b0> <=====
> > 0: 8b 00 mov (%eax),%eax <=====
> > Code; c013de12 <kmem_cache_reap+152/3b0>
> > 2: 47 inc %edi
> > Code; c013de13 <kmem_cache_reap+153/3b0>
> > 3: 39 e8 cmp %ebp,%eax
> > Code; c013de15 <kmem_cache_reap+155/3b0>
> > 5: 75 f9 jne 0 <_EIP>
> > Code; c013de17 <kmem_cache_reap+157/3b0>
> > 7: 8b 73 2c mov 0x2c(%ebx),%esi
> > Code; c013de1a <kmem_cache_reap+15a/3b0>
> > a: 89 fa mov %edi,%edx
> > Code; c013de1c <kmem_cache_reap+15c/3b0>
> > c: 89 f1 mov %esi,%ecx
> > Code; c013de1e <kmem_cache_reap+15e/3b0>
> > e: d3 e2 shl %cl,%edx
> > Code; c013de20 <kmem_cache_reap+160/3b0>
> > 10: 8b 4b 4c mov 0x4c(%ebx),%ecx
> > Code; c013de23 <kmem_cache_reap+163/3b0>
> > 13: 85 00 test %eax,(%eax)

次に、Linuxカーネルのソースコードを検索すると、該当する関数はmm/slab.c
> > にあり、その部分を抜き出すと以下の1710:というラベルが付いている場所に
> > なります。
> >
> > この「mov (%eax),%eax 」という命令は%eaxに入っている値のアドレスの値を
> > 読み出して、それを%eaxに代入するという意味になります。%eaxに0が入って
> > いたためNULLポインタアクセスとなってフォルトが発生したわけですが、その
> > 値がどこから来たのかを上に辿ると16cfc:の「mov 0x10(%ebx),%eax」からと
> > なります。「mov 0x10(%ebx),%eax」は%ebxに0x10を足したアドレスにある値
> > を%eax に代入するという意味になります。先のOOPSのロクから%ebxは
> > 0x0c282ddb8ということが判っていますから、0x10(%ebx)は0x0c282ddc8となり
> > ます。
設定されていません。
課題の履歴
2006-06-15 09:32anonymous新規課題
2006-06-23 18:02anonymousコメント追加: 0003044
2006-07-29 01:17daisuke状態新規 => 要追加情報
2006-07-29 01:17daisuke解決状況不明 => 再現不可
2006-07-29 01:17daisukeコメント追加: 0003045
2006-07-29 01:22daisuke状態要追加情報 => 完了
2006-07-29 01:22daisukeコメント追加: 0003046

コメント
(0003044)
anonymous   
2006-06-23 18:02   
症状の発生を少しフォローします.
この問題が発生しているのは,
DELL PowerEdge 850 で,CPU に Pentium D を使っている場合です.
Vine 3.2 を入れて使い始めました.
kernelは,-smp です.

smpカーネルの場合に,しばしば以下のような状況で停止するので,
smpでない普通のカーネル(1CPU しか見えない)にすると,停止せずに
稼働を続けているようです.

> > Unable to handle kernel NULL pointer dereference at virtual address 000
> > 00000
> > > > *pde = 00000000
> > > > Oops: 0000
> > > > CPU: 1
> > > > EIP: 0010:[<c013de10>] Tainted: P
> > > > Using defaults from ksymoops -t elf32-i386 -a i386
> > > > EFLAGS: 00010013
> > > > eax: 00000000 ebx: c282ddb8 ecx: d167dec0 edx: c2835a60
> > > > esi: 00000000 edi: 0000004a ebp: c282ddc8 esp: c2843f24
> > > > ds: 0018 es: 0018 ss: 0018
> > > > Process kswapd (pid: 5, stackpage=c2843000)
> > > > Stack: c1f3a640 c2842000 c03639f8 00000000 c2842000 c282ddc0 c2835a60 0
> > 0000000
> > > > 00000006 00000001 00000003 c282f268 00000020 000001d0 c03639f8 c
> > 03639f8
> > > > c013f61c c2843f88 000001d0 0000003c 00000020 c013f842 c2843f88 e
> > 0092000
> > > > Call Trace: [<c013f61c>] [<c013f842>] [<c013fa06>] [<c013fa78>] [<c0
> > 13fbce>]
> > > > [<c0105000>] [<c01075de>] [<c013fb30>]
> > > > Code: 8b 00 47 39 e8 75 f9 8b 73 2c 89 fa 89 f1 d3 e2 8b 4b 4c 85
>
>
> Trace; c013f61c <shrink_caches+1c/70>
> > > Trace; c013f842 <try_to_free_pages_zone+62/100>
> > > Trace; c013fa06 <kswapd_balance_pgdat+66/b0>
> > > Trace; c013fa78 <kswapd_balance+28/50>
> > > Trace; c013fbce <kswapd+9e/cd>
> > > Trace; c0105000 <_stext+0/0>
> > > Trace; c01075de <arch_kernel_thread+2e/40>
> > > Trace; c013fb30 <kswapd+0/cd>
> > >
> > > Code; c013de10 <kmem_cache_reap+150/3b0>
> > > 00000000 <_EIP>:
> > > Code; c013de10 <kmem_cache_reap+150/3b0> <=====
> > > 0: 8b 00 mov (%eax),%eax <=====
> > > Code; c013de12 <kmem_cache_reap+152/3b0>
> > > 2: 47 inc %edi
> > > Code; c013de13 <kmem_cache_reap+153/3b0>
> > > 3: 39 e8 cmp %ebp,%eax
> > > Code; c013de15 <kmem_cache_reap+155/3b0>
> > > 5: 75 f9 jne 0 <_EIP>
> > > Code; c013de17 <kmem_cache_reap+157/3b0>
> > > 7: 8b 73 2c mov 0x2c(%ebx),%esi
> > > Code; c013de1a <kmem_cache_reap+15a/3b0>
> > > a: 89 fa mov %edi,%edx
> > > Code; c013de1c <kmem_cache_reap+15c/3b0>
> > > c: 89 f1 mov %esi,%ecx
> > > Code; c013de1e <kmem_cache_reap+15e/3b0>
> > > e: d3 e2 shl %cl,%edx
> > > Code; c013de20 <kmem_cache_reap+160/3b0>
> > > 10: 8b 4b 4c mov 0x4c(%ebx),%ecx
> > > Code; c013de23 <kmem_cache_reap+163/3b0>
> > > 13: 85 00 test %eax,(%eax)
>
> 次に、Linuxカーネルのソースコードを検索すると、該当する関数は
> mm/slab.c
> > > にあり、その部分を抜き出すと以下の1710:というラベルが付いている場所に
> > > なります。
> > >
> > > この「mov (%eax),%eax 」という命令は%eaxに入っている値のアドレスの値を
> > > 読み出して、それを%eaxに代入するという意味になります。%eaxに0が入って
> > > いたためNULLポインタアクセスとなってフォルトが発生したわけですが、その
> > > 値がどこから来たのかを上に辿ると16cfc:の「mov 0x10(%ebx),%eax」からと
> > > なります。「mov 0x10(%ebx),%eax」は%ebxに0x10を足したアドレスにある値
> > > を%eax に代入するという意味になります。先のOOPSのロクから%ebxは
> > > 0x0c282ddb8ということが判っていますから、0x10(%ebx)は0x0c282ddc8となり
> > > ます。
(0003045)
daisuke   
2006-07-29 01:17   
現象を再現させることができませんでした。
(0003046)
daisuke   
2006-07-29 01:22   
> 現象を再現させることができませんでした。
状態を 再現せず に変更しました