Geliang,

Please check whether line 762 can be reached in the case where the
list_for_each_entry reaches the end of the list.  If that can happen,
max3421_ep should not be dereferenced.

julia

On Sat, 19 Dec 2015, kbuild test robot wrote:

> CC: kbuild-...@01.org
> In-Reply-To: 
> <45e8397e370ed99ceb8aa1719c2b56a7ce741eb3.1450455485.git.geliangt...@163.com>
> TO: Geliang Tang <geliangt...@163.com>
> CC: Greg Kroah-Hartman <gre...@linuxfoundation.org>, Sergei Shtylyov 
> <sergei.shtyl...@cogentembedded.com>
> CC: Geliang Tang <geliangt...@163.com>, linux-usb@vger.kernel.org, 
> linux-ker...@vger.kernel.org
>
> Hi Geliang,
>
> [auto build test WARNING on usb/usb-testing]
> [also build test WARNING on v4.4-rc5 next-20151218]
>
> url:    
> https://github.com/0day-ci/linux/commits/Geliang-Tang/usb-host-fotg210-use-list_for_each_entry_safe/20151219-003955
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git 
> usb-testing
> :::::: branch date: 66 minutes ago
> :::::: commit date: 66 minutes ago
>
> >> drivers/usb/host/max3421-hcd.c:762:5-15: ERROR: invalid reference to the 
> >> index variable of the iterator on line 675
>
> git remote add linux-review https://github.com/0day-ci/linux
> git remote update linux-review
> git checkout 610e92adf2a45ef78039582494d8023f385d12ec
> vim +762 drivers/usb/host/max3421-hcd.c
>
> 2d53139f David Mosberger 2014-04-28  669
> 2d53139f David Mosberger 2014-04-28  670      
> spin_lock_irqsave(&max3421_hcd->lock, flags);
> 2d53139f David Mosberger 2014-04-28  671
> 2d53139f David Mosberger 2014-04-28  672      for (;
> 2d53139f David Mosberger 2014-04-28  673           max3421_hcd->sched_pass < 
> SCHED_PASS_DONE;
> 2d53139f David Mosberger 2014-04-28  674           ++max3421_hcd->sched_pass)
> 610e92ad Geliang Tang    2015-12-19 @675              
> list_for_each_entry(max3421_ep, &max3421_hcd->ep_list,
> 610e92ad Geliang Tang    2015-12-19  676                                  
> ep_list) {
> 2d53139f David Mosberger 2014-04-28  677                      urb = NULL;
> 2d53139f David Mosberger 2014-04-28  678                      ep = 
> max3421_ep->ep;
> 2d53139f David Mosberger 2014-04-28  679
> 2d53139f David Mosberger 2014-04-28  680                      switch 
> (usb_endpoint_type(&ep->desc)) {
> 2d53139f David Mosberger 2014-04-28  681                      case 
> USB_ENDPOINT_XFER_ISOC:
> 2d53139f David Mosberger 2014-04-28  682                      case 
> USB_ENDPOINT_XFER_INT:
> 2d53139f David Mosberger 2014-04-28  683                              if 
> (max3421_hcd->sched_pass !=
> 2d53139f David Mosberger 2014-04-28  684                                  
> SCHED_PASS_PERIODIC)
> 2d53139f David Mosberger 2014-04-28  685                                      
> continue;
> 2d53139f David Mosberger 2014-04-28  686                              break;
> 2d53139f David Mosberger 2014-04-28  687
> 2d53139f David Mosberger 2014-04-28  688                      case 
> USB_ENDPOINT_XFER_CONTROL:
> 2d53139f David Mosberger 2014-04-28  689                      case 
> USB_ENDPOINT_XFER_BULK:
> 2d53139f David Mosberger 2014-04-28  690                              if 
> (max3421_hcd->sched_pass !=
> 2d53139f David Mosberger 2014-04-28  691                                  
> SCHED_PASS_NON_PERIODIC)
> 2d53139f David Mosberger 2014-04-28  692                                      
> continue;
> 2d53139f David Mosberger 2014-04-28  693                              break;
> 2d53139f David Mosberger 2014-04-28  694                      }
> 2d53139f David Mosberger 2014-04-28  695
> 2d53139f David Mosberger 2014-04-28  696                      if 
> (list_empty(&ep->urb_list))
> 2d53139f David Mosberger 2014-04-28  697                              
> continue;       /* nothing to do */
> 2d53139f David Mosberger 2014-04-28  698                      urb = 
> list_first_entry(&ep->urb_list, struct urb,
> 2d53139f David Mosberger 2014-04-28  699                                      
>        urb_list);
> 2d53139f David Mosberger 2014-04-28  700                      if 
> (urb->unlinked) {
> 2d53139f David Mosberger 2014-04-28  701                              
> dev_dbg(&spi->dev, "%s: URB %p unlinked=%d",
> 2d53139f David Mosberger 2014-04-28  702                                      
> __func__, urb, urb->unlinked);
> 2d53139f David Mosberger 2014-04-28  703                              
> max3421_hcd->curr_urb = urb;
> 2d53139f David Mosberger 2014-04-28  704                              
> max3421_hcd->urb_done = 1;
> 2d53139f David Mosberger 2014-04-28  705                              
> spin_unlock_irqrestore(&max3421_hcd->lock,
> 2d53139f David Mosberger 2014-04-28  706                                      
>                flags);
> 2d53139f David Mosberger 2014-04-28  707                              return 
> 1;
> 2d53139f David Mosberger 2014-04-28  708                      }
> 2d53139f David Mosberger 2014-04-28  709
> 2d53139f David Mosberger 2014-04-28  710                      switch 
> (usb_endpoint_type(&ep->desc)) {
> 2d53139f David Mosberger 2014-04-28  711                      case 
> USB_ENDPOINT_XFER_CONTROL:
> 2d53139f David Mosberger 2014-04-28  712                              /*
> 2d53139f David Mosberger 2014-04-28  713                               * 
> Allow one control transaction per
> 2d53139f David Mosberger 2014-04-28  714                               * 
> frame per endpoint:
> 2d53139f David Mosberger 2014-04-28  715                               */
> 2d53139f David Mosberger 2014-04-28  716                              if 
> (frame_diff(max3421_ep->last_active,
> 2d53139f David Mosberger 2014-04-28  717                                      
>        max3421_hcd->frame_number) == 0)
> 2d53139f David Mosberger 2014-04-28  718                                      
> continue;
> 2d53139f David Mosberger 2014-04-28  719                              break;
> 2d53139f David Mosberger 2014-04-28  720
> 2d53139f David Mosberger 2014-04-28  721                      case 
> USB_ENDPOINT_XFER_BULK:
> 2d53139f David Mosberger 2014-04-28  722                              if 
> (max3421_ep->retransmit
> 2d53139f David Mosberger 2014-04-28  723                                  && 
> (frame_diff(max3421_ep->last_active,
> 2d53139f David Mosberger 2014-04-28  724                                      
>            max3421_hcd->frame_number)
> 2d53139f David Mosberger 2014-04-28  725                                      
> == 0))
> 2d53139f David Mosberger 2014-04-28  726                                      
> /*
> 2d53139f David Mosberger 2014-04-28  727                                      
>  * We already tried this EP
> 2d53139f David Mosberger 2014-04-28  728                                      
>  * during this frame and got a
> 2d53139f David Mosberger 2014-04-28  729                                      
>  * NAK or error; wait for next frame
> 2d53139f David Mosberger 2014-04-28  730                                      
>  */
> 2d53139f David Mosberger 2014-04-28  731                                      
> continue;
> 2d53139f David Mosberger 2014-04-28  732                              break;
> 2d53139f David Mosberger 2014-04-28  733
> 2d53139f David Mosberger 2014-04-28  734                      case 
> USB_ENDPOINT_XFER_ISOC:
> 2d53139f David Mosberger 2014-04-28  735                      case 
> USB_ENDPOINT_XFER_INT:
> 2d53139f David Mosberger 2014-04-28  736                              if 
> (frame_diff(max3421_hcd->frame_number,
> 2d53139f David Mosberger 2014-04-28  737                                      
>        max3421_ep->last_active)
> 2d53139f David Mosberger 2014-04-28  738                                  < 
> urb->interval)
> 2d53139f David Mosberger 2014-04-28  739                                      
> /*
> 2d53139f David Mosberger 2014-04-28  740                                      
>  * We already processed this
> 2d53139f David Mosberger 2014-04-28  741                                      
>  * end-point in the current
> 2d53139f David Mosberger 2014-04-28  742                                      
>  * frame
> 2d53139f David Mosberger 2014-04-28  743                                      
>  */
> 2d53139f David Mosberger 2014-04-28  744                                      
> continue;
> 2d53139f David Mosberger 2014-04-28  745                              break;
> 2d53139f David Mosberger 2014-04-28  746                      }
> 2d53139f David Mosberger 2014-04-28  747
> 2d53139f David Mosberger 2014-04-28  748                      /* move current 
> ep to tail: */
> 610e92ad Geliang Tang    2015-12-19  749                      
> list_move_tail(&max3421_ep->ep_list,
> 610e92ad Geliang Tang    2015-12-19  750                                     
> &max3421_hcd->ep_list);
> 2d53139f David Mosberger 2014-04-28  751                      curr_urb = urb;
> 2d53139f David Mosberger 2014-04-28  752                      goto done;
> 2d53139f David Mosberger 2014-04-28  753              }
> 2d53139f David Mosberger 2014-04-28  754  done:
> 2d53139f David Mosberger 2014-04-28  755      if (!curr_urb) {
> 2d53139f David Mosberger 2014-04-28  756              
> spin_unlock_irqrestore(&max3421_hcd->lock, flags);
> 2d53139f David Mosberger 2014-04-28  757              return 0;
> 2d53139f David Mosberger 2014-04-28  758      }
> 2d53139f David Mosberger 2014-04-28  759
> 2d53139f David Mosberger 2014-04-28  760      urb = max3421_hcd->curr_urb = 
> curr_urb;
> 2d53139f David Mosberger 2014-04-28  761      epnum = 
> usb_endpoint_num(&urb->ep->desc);
> 2d53139f David Mosberger 2014-04-28 @762      if (max3421_ep->retransmit)
> 2d53139f David Mosberger 2014-04-28  763              /* restart (part of) a 
> USB transaction: */
> 2d53139f David Mosberger 2014-04-28  764              max3421_ep->retransmit 
> = 0;
> 2d53139f David Mosberger 2014-04-28  765      else {
>
> :::::: The code at line 762 was first introduced by commit
> :::::: 2d53139f31626bad6f8983d8e519ddde2cbba921 Add support for using a 
> MAX3421E chip as a host driver.
>
> :::::: TO: David Mosberger <dav...@egauge.net>
> :::::: CC: Greg Kroah-Hartman <gre...@linuxfoundation.org>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to