USB Device driver core defect

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

USB Device driver core defect

1,466 Views
timias
Contributor IV

During my testing which consisted of disconnecting and reconnecting a Kinetis K60DN512 (MQX 4.0) USB port to Windows XP machine repeatedly, I was able to repeatedly generate a hard fault which locked up my processor.

I traced the defect to the khci_dev_main.c file specifically in the _usb_device_usbfs_service_tk_dne_intr function

My testing caused this function to be called with the direction set to USB_RECV. When this happened, It was possible to have

USB_XD_QUEUE_GET_HEAD(&state_ptr->EP_INFO[ep_num].xd_queue_recv,

  &xd_ptr);

return the xd_ptr as a NULL. The code isn't hardened against this and it crashed.

By adding:

if (xd_ptr != NULL)

{

    

} <- put this before: " if ( _usb_device_usbfs_process_receive_request(state_ptr,ep_num,stat,&buffer_ptr)!=USB_OK)"

seems to prevent the crash, it needs to be reviewed by the developers, becasue I think a more elegant solution is needed.

a similar problem seems to be in _usb_device_usbfs_service_tk_dne_intr, but my testing didn't indicate that that function was being called on quick reconnects.

This problem also exists in MQX 3.8, but the file name is different

Labels (1)
Tags (5)
0 Kudos
Reply
1 Reply

1,210 Views
c0170
Senior Contributor III

Hello Robert Hodson,

Firstly thank you for taking time to report this :smileywink:  I am going to find out more about these bugs in code . I will let you know the result eventually.

Regards,

MartinK

0 Kudos
Reply