[BUG] Oops on "rmmod fbcon" on 2.6.0-test3

From: Jakub Bogusz <hidden>
Date: 2003-08-09 23:24:52

"rmmod fbcon" causes an oops on 2.6.0-test3 (and 2.6.0-test2).
It seems that the module doesn't uninitialize some structures
properly...
ksymoops 2.4.9 doesn't like 2.6-style ksyms, so here is an oops decoded
manually:

kernel: Unable to handle kernel paging request at virtual address e28a2598
kernel: printing eip:
kernel: c01ccb1f
kernel: *pde = 143b3067
kernel: *pte = 00000000
kernel: Oops: 0000 [#1]
kernel: Unable to handle kernel paging request at virtual address e28a2598
kernel: printing eip:
kernel: c01cca5d
kernel: *pde = 143b3067
kernel: *pte = 00000000
kernel: Oops: 0000 [#2]
kernel: CPU:    0
kernel: EIP:    0060:[<c01cca5d>]    Not tainted
kernel: EFLAGS: 00010046
kernel: EIP is at hide_cursor+0x5d/0xb0
kernel: eax: e28a2580   ebx: 00000000   ecx: c13d8000   edx: 00000001
kernel: esi: c02fee36   edi: 00000000   ebp: 00000000   esp: d5d23c6c
kernel: ds: 007b   es: 007b   ss: 0068
kernel: Process bash (pid: 2628, threadinfo=d5d22000 task=d4ca2180)
kernel: Stack: c13d8000 00000002 00000001 d5d23cdb c13d8000 c01d0100 00000000 31343362 
kernel: c02b1a00 d5d23cf4 d5237ebf 000038a8 d5d23cf3 c028aea0 c02fee36 00000010 
kernel: ffffff63 c011b5e1 c028aea0 c02fee36 00000010 00001b86 00001b86 00000034 
kernel: Call Trace:
kernel: [<c01d0100>] vt_console_print+0x2e0/0x2f0
kernel: [<c011b5e1>] __call_console_drivers+0x51/0x60
kernel: [<c011b6e6>] call_console_drivers+0x76/0x120
kernel: [<c011ba0d>] release_console_sem+0x4d/0xd0
kernel: [<c011b92c>] printk+0x12c/0x180
kernel: [<c011b92c>] printk+0x12c/0x180
kernel: [<c01156a0>] do_page_fault+0x0/0x451
kernel: [<c0109829>] die+0x69/0xf0
kernel: [<c01157cc>] do_page_fault+0x12c/0x451
kernel: [<c01f38a8>] move_buf_aligned+0x38/0x50
kernel: [<c01f7da5>] soft_cursor+0x165/0x240
kernel: [<c0122c46>] update_process_times+0x46/0x60
kernel: [<c0122aab>] update_wall_time+0xb/0x40
kernel: [<c0122f1f>] do_timer+0xdf/0xf0
kernel: [<c01156a0>] do_page_fault+0x0/0x451
kernel: [<c0109245>] error_code+0x2d/0x38
kernel: [<c01ccb1f>] set_cursor+0x6f/0x90
kernel: [<c01d04e8>] con_flush_chars+0x48/0x50
kernel: [<c01c0845>] opost_block+0x125/0x1e0
kernel: [<c013f65d>] copy_page_range+0x11d/0x380
kernel: [<c01333f5>] unlock_page+0x15/0x60
kernel: [<c01409ee>] do_wp_page+0x38e/0x3e0
kernel: [<c01c2b5b>] write_chan+0x19b/0x230
kernel: [<c0117b70>] default_wake_function+0x0/0x30
kernel: [<c0117b70>] default_wake_function+0x0/0x30
kernel: [<c01bd4c8>] tty_write+0x248/0x300
kernel: [<c01c29c0>] write_chan+0x0/0x230
kernel: [<c01270f1>] sys_rt_sigaction+0xf1/0x120
kernel: [<c01bd280>] tty_write+0x0/0x300
kernel: [<c014f408>] vfs_write+0xd8/0x140
kernel: [<c0126115>] sys_rt_sigprocmask+0xa5/0x160
kernel: [<c014f522>] sys_write+0x42/0x70
kernel: [<c010909b>] syscall_call+0x7/0xb
kernel: 
kernel: Code: ff 50 18 8b 5c 24 10 83 c4 14 c3 8b 41 44 8b 51 28 89 44 24 
kernel: <6>note: bash[2628] exited with preempt_count 2
kernel: release_dev: tty1: read/write wait queue active!
[...last message repeated until reboot...]

symbols:
e28a2580 R fb_con       [fbcon]
c01cca00 t hide_cursor

(drivers/char/vt.c: hide_cursor)
00000c40 <hide_cursor>:
[...]
     c81:       39 08                   cmp    %ecx,(%eax)
     c83:       74 23                   je     ca8 <hide_cursor+0x68>
     c85:       c7 05 98 02 00 00 ff    movl   $0xffffffff,0x298
     c8c:       ff ff ff
     c8f:       8b 41 28                mov    0x28(%ecx),%eax
     c92:       89 0c 24                mov    %ecx,(%esp,1)
     c95:       c7 44 24 04 02 00 00    movl   $0x2,0x4(%esp,1)
     c9c:       00
==>  c9d:       ff 50 18                call   *0x18(%eax)
     ca0:       8b 5c 24 10             mov    0x10(%esp,1),%ebx
     ca4:       83 c4 14                add    $0x14,%esp
     ca7:       c3                      ret

static void hide_cursor(int currcons)
{
        if (currcons == sel_cons)
                clear_selection();
        if (softcursor_original != -1) {
                scr_writew(softcursor_original,(u16 *) pos);
                if (DO_UPDATE)
==>                     sw->con_putc(vc_cons[currcons].d, softcursor_original, y, x);
                softcursor_original = -1;
        }
        sw->con_cursor(vc_cons[currcons].d,CM_ERASE);
}


(sw, i.e. vc_cons[currcons].d->vc_sw, still pointed to destroyed fb_con)


-- 
Jakub Bogusz    http://cyber.cs.net.pl/~qboosh/
PLD Linux       http://www.pld-linux.org/


-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help