problem code confusion

Michael Moedt xemc at yahoo.com
Thu Sep 23 12:38:29 EDT 2004


Hi.
My kernel crashed recently, and I'm analyzing the kernel oops.  I'll
put parts of the dump at the end of this message.  It crashed because
of a NULL pointer dereference (doesn't every crash do this?).

Anyways, I ran into this assembly:
(looking at the 'objdump -D vmlinux' output)

c00b093c:       ebfdfa5e        bl      c002f2bc <printk>
c00b0940:       e5953110        ldr     r3, [r5, #272]
c00b0944:       e3530000        cmp     r3, #0  ; 0x0
c00b0948:       1595110c        ldrne   r1, [r5, #268]
c00b094c:       159f0300        ldrne   r0, [pc, #768]  ; c00b0c54
<jffs2_flash_writev+0x468>
c00b0950:       10812003        addne   r2, r1, r3
c00b0954:       1bfdfa58        blne    c002f2bc <printk>
c00b0958:       e3a03000        mov     r3, #0  ; 0x0
c00b095c:       e5833000        str     r3, [r3]
c00b0960:       e51b104c        ldr     r1, [fp, -#76]
c00b0964:       e3510002        cmp     r1, #2  ; 0x2
c00b0968:       9a000003        bls     c00b097c
<jffs2_flash_writev+0x190>
c00b096c:       e59f02e4        ldr     r0, [pc, #740]  ; c00b0c58
<jffs2_flash_writev+0x46c>
c00b0970:       ebfdfa51        bl      c002f2bc <printk>
c00b0974:       e3a03000        mov     r3, #0  ; 0x0
c00b0978:       e5833000        str     r3, [r3]

I'm interested in the last two lines (it happens furter up too..)
Wouldn't that move 0x0 into r3, and then try to store it at address
0x00000000.  Could that be the NULL pointer dereference referred to?
Why would the compiled code have that in there?  (Please forgive my
naivite if i'm completely out to lunch)

Any comments would be apprectiated.   Thanks.


This is kernel 2.6.9-rc2, mtd-snapshot-20040921, with
arm-softfloat-linux-gnu-gcc (from crosstool) 3.3.2.
Here's that part of the dump:

Unable to handle kernel NULL pointer dereference at virtual address
00000000
Internal error: Oops: 807 [#1]
CPU: 0
pc : [<c00b095c>]    lr : [<00000001>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
sp : c11fbbc4  ip : 60000093  fp : c11fbc34
r10: c11014f4  r9 : 00000000  r8 : 007d8000
r7 : 00000000  r6 : 007dae40  r5 : c0170400  r4 : 00000000
r3 : 00000000  r2 : 00000000  r1 : c11fa000  r0 : 0000003a
Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  Segment user
Control: 4000717F  Table: C01DC000  DAC: 00000015
Stack: (0xc11fbbc4 to 0xc11fc000)
bbc0:          c11fbbec cc167979 c0135728 00000004 007dae40 00000000
ffffffff
bbe0: 00000000 00000000 00000002 c11fbc6c c00b8b10 cd800000 00000000
c0135728
bc00: c11fbc2c c11fbc10 c00bda6c 007dae40 00000000 c11014f4 c1178b60
c0170400

<I'll cut to the backtrace here>

Backtrace:
Function entered at [<c00b07f0>] from [<c00a6ef8>]
Function entered at [<c00a6d84>] from [<c00a7d14>]
Function entered at [<c00a7a2c>] from [<c00a3060>]
Function entered at [<c00a2eb4>] from [<c0048e58>]
Function entered at [<c0048ab0>] from [<c004956c>]
Function entered at [<c004909c>] from [<c0049618>]
Function entered at [<c0049594>] from [<c00497a8>]
 r9 = BEFFEAF8  r8 = C01A8260  r7 = C1178B88  r6 = 00037000
 r5 = C1178C20  r4 = C1178BF0
Function entered at [<c004974c>] from [<c0060994>]
Function entered at [<c00608b0>] from [<c0060a90>]
Function entered at [<c0060a40>] from [<c001b240>]
 r9 = C11FA000  r8 = C001B3C4  r7 = 00000004  r6 = BEFFEAF8
 r5 = 00001000  r4 = 00001000
Code: 159f0300 10812003 1bfdfa58 e3a03000 (e5833000)

>>EIP; c00b095c <jffs2_flash_writev+170/51c>   <=====

Trace; c00b07f0 <jffs2_flash_writev+4/51c>
Trace; c00a6ef8 <jffs2_write_dnode+174/684>
Trace; c00a6d84 <jffs2_write_dnode+0/684>
Trace; c00a7d14 <jffs2_write_inode_range+2e8/46c>
Trace; c00a7a2c <jffs2_write_inode_range+0/46c>
Trace; c00a3060 <jffs2_commit_write+1ac/308>
Trace; c00a2eb4 <jffs2_commit_write+0/308>
Trace; c0048e58 <generic_file_buffered_write+3ac/5f0>
Trace; c0048ab0 <generic_file_buffered_write+4/5f0>
<snip>






More information about the linux-mtd mailing list