Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/dev/usb



On 04.09.10 03:31, matthew green wrote:
>> Module Name: src
>> Committed By:        cegger
>> Date:                Fri Sep  3 23:15:09 UTC 2010
>>
>> Modified Files:
>>      src/sys/dev/usb: usbdi.c
>>
>> Log Message:
>> fix NULL pointer dereference on detaching:
>> Attach an USB device that looks like this:
>> ugen1 at uhub0 port 2
>> ugen1: detached
>> ugen1: at uhub0 port 2 (addr 3) disconnected
>>
>> When unplugging the device:
>>
>> usb_transfer_complete: xfer=0xffff80000832a800 not busy 0x00000055
>> usb_transfer_complete: bad dequeue 0xffff80000832a800 != 0x0
> 
> this change seems to be a workaround hack rather than any sort of
> actual bug fix.  the code immediately before it is checking that
> the queue head is not the same as this xfer, and prints a message
> under DIAG that there is likely a problem.  ie, you're avoiding a
> crash in a place already known to be problematic, and instead of
> trying to fix it you're patching over it without actually figuring
> out what is going wrong.
> 
> please revert this change and debug the crash properly.

usb_transfer_complete: xfer=0xffff80000832a800 not busy 0x00000055
usb_transfer_complete: bad dequeue 0xffff80000832a800 != 0x0
fatal page fault in supervisor mode
trap type 6 code 0 rip 0xffffffff8078fe62 cs 8 rflags 10282 cr2 78 cpl 4
rsp 0xf
fff80004b654c70
kernel: page fault trap, code=0
Stopped in pid 0.3 (system) at netbsd:usb_transfer_complete+0xf3: movq
0x78(%rax
),%rax
db{0}> bt
usb_transfer_complete+0xf3
ohci_softintr+0x340
softint_dispatch+0xd0
DDB lost frame for Xsoftintr+0x4f, trying 0xffff80004b654d70
Xsoftintr+0x4f
--- interrupt ---
0:
db{0}> sh reg
[...]
rax   0
[...]


Using gdb and list *(usb_transfer_complete+0xf3) points to line 803
which is the SIMPLEQ_REMOVE_HEAD macro.

listing the rip 0xffffffff8078fe62 points to line 777
which is

  if (xfer->actlen > xfer->length) {

Are there two threads interfering ?

Christoph


Home | Main Index | Thread Index | Old Index