On Tue, Jul 6, 2010 at 08:24, loody <miloody@xxxxxxxxx> wrote: > If I remember correctly, the copy_from_user will translate the user > mode address by tlb. Indeed... > But why my usb kernel driver will get user mode address as 0x00000070? > > below is the kernel dump happen on my machine. > > ehci ehci.0: irq status c028 Async Periodic IAA FLR > ehci ehci.0: itd_submit 1 urb 87f20c00 ep1in len 98304, 32 pkts 1 > uframes [87b48280] > ehci ehci.0: schedule devp 1 ep1in-iso period 1 start 46.0 > ehci ehci.0: itd_submit 1 urb 87f20800 ep1in len 98304, 32 pkts 1 > uframes [87b48280] > ehci ehci.0: irq status c009 Async Periodic FLR INT > CPU 0 Unable to handle kernel paging request at virtual address ^^^^^^ ... but this one is about a bad kernel address. > 00000070, epc == c045e8ac, ra == c045e610 Looks like an offset in a struct pointed to by a NULL pointer. > Oops[#1]: > Cpu 0 > $ 0 : 00000000 00000001 00000000 00000007 > $ 4 : a7b430bc 00000000 00000000 00000000 > $ 8 : 00000008 00000002 8c005400 0000000f > $12 : ffffffff 00000008 70000000 ffffffee > $16 : 00000000 00000001 a7b45100 40000000 > $20 : 20000000 00000000 87387ec0 87387e00 > $24 : ffffffb1 ffffffc1 > $28 : 87268000 872697a0 87b460bc c045e610 > Hi : 00000178 > Lo : 00000000 > epc : c045e8ac ehci_work+0x640/0xcb4 [ehci_hcd] > Not tainted > ra : c045e610 ehci_work+0x3a4/0xcb4 [ehci_hcd] > Status: 11000002 KERNEL EXL > Cause : 40801408 > BadVA : 00000070 > PrId : 00019655 (MIPS 24Kc) > Modules linked in: uvcvideo ehci_hcd usbcore > Process a.out (pid: 823, threadinfo=87268000, task=8726a530, tls=00000000) > Stack : 87387ec0 00000050 35303830 61376234 00000000 00000000 00000178 0000003a > 000000bc 87387efc 000001d6 0000002f 00000800 a7b430bc 00000000 00000004 > 87387ed0 0000c009 87387ec0 87387e00 00000000 00000002 ffffffff 00000001 > 00010039 c0465474 81102200 c0466e7c 87893300 87269818 20717269 74617473 > 63207375 20393030 6e797341 65502063 646f6972 46206369 4920524c 0000544e > ... > Call Trace: > [<c045e8ac>] ehci_work+0x640/0xcb4 [ehci_hcd] > [<c0465474>] ehci_irq+0x108/0x524 [ehci_hcd] > [<c020ee2c>] usb_hcd_irq+0x50/0xfc [usbcore] > [<801687cc>] handle_IRQ_event+0x90/0x188 > [<8016a7a0>] handle_percpu_irq+0x54/0xbc > [<80109f90>] irq_dispatch+0x40/0x6c > [<8010040c>] ret_from_irq+0x0/0x4 > [<8013b88c>] __do_softirq+0x7c/0x164 > [<8013b9f0>] do_softirq+0x7c/0x84 > [<80109f98>] irq_dispatch+0x48/0x6c > [<8010040c>] ret_from_irq+0x0/0x4 > [<80135d38>] vprintk+0x31c/0x458 > [<8010555c>] printk+0x24/0x30 > [<c0462e24>] ehci_urb_enqueue+0x5dc/0x13d8 [ehci_hcd] > [<c02107b4>] usb_hcd_submit_urb+0x110/0xc5c [usbcore] > [<c054b514>] uvc_init_video+0x258/0x494 [uvcvideo] > [<c054a2d0>] uvc_v4l2_do_ioctl+0x8f0/0x12c0 [uvcvideo] > [<802e5908>] video_usercopy+0x240/0x424 > [<801b2d9c>] vfs_ioctl+0xbc/0xcc > [<801b2e40>] do_vfs_ioctl+0x94/0x7a0 > [<801b3594>] sys_ioctl+0x48/0xc0 > [<80102150>] stack_done+0x20/0x3c > > > Code: 00061100 00e21021 24c30007 <8c440070> 00031900 00e31821 > 7ca24c00 00822023 ac640004 > Disabling lock debugging due to kernel taint > Kernel panic - not syncing: Fatal exception in interrupt Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds