RE: Re: [PATCH] USB: Fix race condition during UVC webcam disconnect

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

 




Thanks Den Carpenter for information.
yes, i will modify new patch version accordingly to add for mutex_unlock(hcd->bandwidth_mutex); before returning.
  
>Hi Aman,
>
>kernel test robot noticed the following build warnings:
>
>https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
>url:    https://protect2.fireeye.com/v1/url?k=c33c7aba-a2b76f89-c33df1f5-000babff9bb7-672d2cfefe2327a5&q=1&e=0dbea670-3cf3-4a45-a999->157e4e0dcad9&u=https%3A%2F%2Fgithub.com%2Fintel-lab-lkp%2Flinux%2Fcommits%2FAman-Deep%2FUSB-Fix-race-condition-during-UVC-webcam-disconnect%2F20230720->202046
>base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
>patch link:    https://lore.kernel.org/r/20230720113142.3070583-1-aman.deep%40samsung.com
>patch subject: [PATCH] USB: Fix race condition during UVC webcam disconnect
>config: parisc-randconfig-m041-20230726 (https://download.01.org/0day-ci/archive/20230727/202307270834.rpaexQSs-lkp@xxxxxxxxx/config)
>compiler: hppa-linux-gcc (GCC) 12.3.0
>reproduce: (https://download.01.org/0day-ci/archive/20230727/202307270834.rpaexQSs-lkp@xxxxxxxxx/reproduce)
>
>If you fix the issue in a separate patch/commit (i.e. not just a new version of
>the same patch/commit), kindly add following tags
>| Reported-by: kernel test robot <lkp@xxxxxxxxx>
>| Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
>| Closes: https://lore.kernel.org/r/202307270834.rpaexQSs-lkp@xxxxxxxxx/


we will add it when creating new patch version.


>
>smatch warnings:
>drivers/usb/core/message.c:1668 usb_set_interface() warn: inconsistent returns 'hcd->bandwidth_mutex'.
>
>vim +1668 drivers/usb/core/message.c
>
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1528  int usb_set_interface(struct usb_device *dev, int interface, int alternate)
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1529  {
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1530          struct usb_interface *iface;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1531          struct usb_host_interface *alt;
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1532          struct usb_hcd *hcd = bus_to_hcd(dev->bus);
>7a7b562d08ad6d Hans de Goede                 2013-11-08  1533          int i, ret, manual = 0;
>3e35bf39e0b909 Greg Kroah-Hartman            2008-01-30  1534          unsigned int epaddr;
>3e35bf39e0b909 Greg Kroah-Hartman            2008-01-30  1535          unsigned int pipe;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1536  
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1537          if (dev->state == USB_STATE_SUSPENDED)
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1538                  return -EHOSTUNREACH;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1539  
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1540          iface = usb_ifnum_to_if(dev, interface);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1541          if (!iface) {
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1542                  dev_dbg(&dev->dev, "selecting invalid interface %d\n",
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1543                          interface);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1544                  return -EINVAL;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1545          }
>e534c5b831c8b8 Alan Stern                    2011-07-01  1546          if (iface->unregistering)
>e534c5b831c8b8 Alan Stern                    2011-07-01  1547                  return -ENODEV;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1548  
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1549          alt = usb_altnum_to_altsetting(iface, alternate);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1550          if (!alt) {
>385f690bc058ba Thadeu Lima de Souza Cascardo 2010-01-17  1551                  dev_warn(&dev->dev, "selecting invalid altsetting %d\n",
>3b6004f3b5a8b4 Greg Kroah-Hartman            2008-08-14  1552                           alternate);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1553                  return -EINVAL;
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1554          }
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1555          /*
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1556           * usb3 hosts configure the interface in usb_hcd_alloc_bandwidth,
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1557           * including freeing dropped endpoint ring buffers.
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1558           * Make sure the interface endpoints are flushed before that
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1559           */
>f9a5b4f58b280c Mathias Nyman                 2018-09-03  1560          usb_disable_interface(dev, iface, false);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1561  
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1562          /* Make sure we have enough bandwidth for this alternate interface.
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1563           * Remove the current alt setting and add the new alt setting.
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1564           */
>d673bfcbfffdeb Sarah Sharp                   2010-10-15  1565          mutex_lock(hcd->bandwidth_mutex);
>8306095fd2c110 Sarah Sharp                   2012-05-02  1566          /* Disable LPM, and re-enable it once the new alt setting is installed,
>8306095fd2c110 Sarah Sharp                   2012-05-02  1567           * so that the xHCI driver can recalculate the U1/U2 timeouts.
>8306095fd2c110 Sarah Sharp                   2012-05-02  1568           */
>8306095fd2c110 Sarah Sharp                   2012-05-02  1569          if (usb_disable_lpm(dev)) {
>1ccc417e6c3201 Joe Perches                   2017-12-05  1570                  dev_err(&iface->dev, "%s Failed to disable LPM\n", __func__);
>8306095fd2c110 Sarah Sharp                   2012-05-02  1571                  mutex_unlock(hcd->bandwidth_mutex);
>8306095fd2c110 Sarah Sharp                   2012-05-02  1572                  return -ENOMEM;
>8306095fd2c110 Sarah Sharp                   2012-05-02  1573          }
>7a7b562d08ad6d Hans de Goede                 2013-11-08  1574          /* Changing alt-setting also frees any allocated streams */
>7a7b562d08ad6d Hans de Goede                 2013-11-08  1575          for (i = 0; i < iface->cur_altsetting->desc.bNumEndpoints; i++)
>7a7b562d08ad6d Hans de Goede                 2013-11-08  1576                  iface->cur_altsetting->endpoint[i].streams = 0;
>7a7b562d08ad6d Hans de Goede                 2013-11-08  1577  
>4682bbb9e2f196 Aman Deep                     2023-07-20  1578          if (dev->state == USB_STATE_NOTATTACHED)
>4682bbb9e2f196 Aman Deep                     2023-07-20  1579                  return -ENODEV;
>
>
>mutex_unlock(hcd->bandwidth_mutex); before returning
>
>4682bbb9e2f196 Aman Deep                     2023-07-20  1580  
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1581          ret = usb_hcd_alloc_bandwidth(dev, NULL, iface->cur_altsetting, alt);
>4682bbb9e2f196 Aman Deep                     2023-07-20  1582  
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1583          if (ret < 0) {
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1584                  dev_info(&dev->dev, "Not enough bandwidth for altsetting %d\n",
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1585                                  alternate);
>8306095fd2c110 Sarah Sharp                   2012-05-02  1586                  usb_enable_lpm(dev);
>d673bfcbfffdeb Sarah Sharp                   2010-10-15  1587                  mutex_unlock(hcd->bandwidth_mutex);
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1588                  return ret;
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1589          }
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1590  
>392e1d9817d002 Alan Stern                    2008-03-11  1591          if (dev->quirks & USB_QUIRK_NO_SET_INTF)
>392e1d9817d002 Alan Stern                    2008-03-11  1592                  ret = -EPIPE;
>392e1d9817d002 Alan Stern                    2008-03-11  1593          else
>297e84c04d76b9 Greg Kroah-Hartman            2020-09-14  1594                  ret = usb_control_msg_send(dev, 0,
>297e84c04d76b9 Greg Kroah-Hartman            2020-09-14  1595                                             USB_REQ_SET_INTERFACE,
>297e84c04d76b9 Greg Kroah-Hartman            2020-09-14  1596                                             USB_RECIP_INTERFACE, alternate,
>ddd1198e3e0935 Oliver Neukum                 2020-09-23  1597                                             interface, NULL, 0, 5000,
>ddd1198e3e0935 Oliver Neukum                 2020-09-23  1598                                             GFP_NOIO);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1599  
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1600          /* 9.4.10 says devices don't need this and are free to STALL the
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1601           * request if the interface only has one alternate setting.
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1602           */
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1603          if (ret == -EPIPE && iface->num_altsetting == 1) {
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1604                  dev_dbg(&dev->dev,
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1605                          "manual set_interface for iface %d, alt %d\n",
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1606                          interface, alternate);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1607                  manual = 1;
>297e84c04d76b9 Greg Kroah-Hartman            2020-09-14  1608          } else if (ret) {
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1609                  /* Re-instate the old alt setting */
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1610                  usb_hcd_alloc_bandwidth(dev, NULL, alt, iface->cur_altsetting);
>8306095fd2c110 Sarah Sharp                   2012-05-02  1611                  usb_enable_lpm(dev);
>d673bfcbfffdeb Sarah Sharp                   2010-10-15  1612                  mutex_unlock(hcd->bandwidth_mutex);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1613                  return ret;
>3f0479e00a3fca Sarah Sharp                   2009-12-03  1614          }
>d673bfcbfffdeb Sarah Sharp                   2010-10-15  1615          mutex_unlock(hcd->bandwidth_mutex);
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1616  
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1617          /* FIXME drivers shouldn't need to replicate/bugfix the logic here
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1618           * when they implement async or easily-killable versions of this or
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1619           * other "should-be-internal" functions (like clear_halt).
>^1da177e4c3f41 Linus Torvalds                2005-04-16  1620           * should hcd+usbcore postprocess control requests?
>
>-- 
>0-DAY CI Kernel Test Service
>https://protect2.fireeye.com/v1/url?k=f58bda35-9400cf06-f58a517a-000babff9bb7-d72ab9bab3df6b4a&q=1&e=0dbea670-3cf3-4a45-a999->157e4e0dcad9&u=https%3A%2F%2Fgithub.com%2Fintel%2Flkp-tests%2Fwiki
>
>


Thanks,
Aman
 






[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux