All of lore.kernel.org
 help / color / mirror / Atom feed
* [shuah:usbip_test 11/12] drivers/usb/usbip/vudc_sysfs.c:159:3-9: preceding lock on line 115
@ 2021-03-27  6:52 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-03-27  6:52 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 11261 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Shuah Khan <skhan@linuxfoundation.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux.git usbip_test
head:   8a12ab14524ec443c36de13fc4e25e54dd2f5c3a
commit: 5022f2ccbf54a0fb2d8fe8cd62ec43184eee0c73 [11/12] usbip: vudc synchronize sysfs code paths
:::::: branch date: 6 hours ago
:::::: commit date: 6 hours ago
config: i386-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Julia Lawall <julia.lawall@lip6.fr>


cocci warnings: (new ones prefixed by >>)
>> drivers/usb/usbip/vudc_sysfs.c:159:3-9: preceding lock on line 115
   drivers/usb/usbip/vudc_sysfs.c:165:3-9: preceding lock on line 115

vim +159 drivers/usb/usbip/vudc_sysfs.c

ea6873a45a22f3 Igor Kotrasinski   2016-03-08   92  
cd66a6ca11e971 Shuah Khan         2021-03-07   93  static ssize_t usbip_sockfd_store(struct device *dev,
cd66a6ca11e971 Shuah Khan         2021-03-07   94  				  struct device_attribute *attr,
ea6873a45a22f3 Igor Kotrasinski   2016-03-08   95  				  const char *in, size_t count)
ea6873a45a22f3 Igor Kotrasinski   2016-03-08   96  {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08   97  	struct vudc *udc = (struct vudc *) dev_get_drvdata(dev);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08   98  	int rv;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08   99  	int sockfd = 0;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  100  	int err;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  101  	struct socket *socket;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  102  	unsigned long flags;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  103  	int ret;
cd66a6ca11e971 Shuah Khan         2021-03-07  104  	struct task_struct *tcp_rx = NULL;
cd66a6ca11e971 Shuah Khan         2021-03-07  105  	struct task_struct *tcp_tx = NULL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  106  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  107  	rv = kstrtoint(in, 0, &sockfd);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  108  	if (rv != 0)
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  109  		return -EINVAL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  110  
df3334c223a033 Colin Ian King     2018-02-22  111  	if (!udc) {
df3334c223a033 Colin Ian King     2018-02-22  112  		dev_err(dev, "no device");
df3334c223a033 Colin Ian King     2018-02-22  113  		return -ENODEV;
df3334c223a033 Colin Ian King     2018-02-22  114  	}
5022f2ccbf54a0 Shuah Khan         2021-03-26 @115  	mutex_lock(&udc->ud.sysfs_lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  116  	spin_lock_irqsave(&udc->lock, flags);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  117  	/* Don't export what we don't have */
df3334c223a033 Colin Ian King     2018-02-22  118  	if (!udc->driver || !udc->pullup) {
df3334c223a033 Colin Ian King     2018-02-22  119  		dev_err(dev, "gadget not bound");
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  120  		ret = -ENODEV;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  121  		goto unlock;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  122  	}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  123  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  124  	if (sockfd != -1) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  125  		if (udc->connected) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  126  			dev_err(dev, "Device already connected");
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  127  			ret = -EBUSY;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  128  			goto unlock;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  129  		}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  130  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  131  		spin_lock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  132  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  133  		if (udc->ud.status != SDEV_ST_AVAILABLE) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  134  			ret = -EINVAL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  135  			goto unlock_ud;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  136  		}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  137  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  138  		socket = sockfd_lookup(sockfd, &err);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  139  		if (!socket) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  140  			dev_err(dev, "failed to lookup sock");
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  141  			ret = -EINVAL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  142  			goto unlock_ud;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  143  		}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  144  
52b49d2f7d277b Shuah Khan         2021-03-03  145  		if (socket->type != SOCK_STREAM) {
52b49d2f7d277b Shuah Khan         2021-03-03  146  			dev_err(dev, "Expecting SOCK_STREAM - found %d",
52b49d2f7d277b Shuah Khan         2021-03-03  147  				socket->type);
52b49d2f7d277b Shuah Khan         2021-03-03  148  			ret = -EINVAL;
52b49d2f7d277b Shuah Khan         2021-03-03  149  			goto sock_err;
52b49d2f7d277b Shuah Khan         2021-03-03  150  		}
52b49d2f7d277b Shuah Khan         2021-03-03  151  
cd66a6ca11e971 Shuah Khan         2021-03-07  152  		/* unlock and create threads and get tasks */
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  153  		spin_unlock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  154  		spin_unlock_irqrestore(&udc->lock, flags);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  155  
cd66a6ca11e971 Shuah Khan         2021-03-07  156  		tcp_rx = kthread_create(&v_rx_loop, &udc->ud, "vudc_rx");
cd66a6ca11e971 Shuah Khan         2021-03-07  157  		if (IS_ERR(tcp_rx)) {
cd66a6ca11e971 Shuah Khan         2021-03-07  158  			sockfd_put(socket);
cd66a6ca11e971 Shuah Khan         2021-03-07 @159  			return -EINVAL;
cd66a6ca11e971 Shuah Khan         2021-03-07  160  		}
cd66a6ca11e971 Shuah Khan         2021-03-07  161  		tcp_tx = kthread_create(&v_tx_loop, &udc->ud, "vudc_tx");
cd66a6ca11e971 Shuah Khan         2021-03-07  162  		if (IS_ERR(tcp_tx)) {
cd66a6ca11e971 Shuah Khan         2021-03-07  163  			kthread_stop(tcp_rx);
cd66a6ca11e971 Shuah Khan         2021-03-07  164  			sockfd_put(socket);
cd66a6ca11e971 Shuah Khan         2021-03-07  165  			return -EINVAL;
cd66a6ca11e971 Shuah Khan         2021-03-07  166  		}
cd66a6ca11e971 Shuah Khan         2021-03-07  167  
cd66a6ca11e971 Shuah Khan         2021-03-07  168  		/* get task structs now */
cd66a6ca11e971 Shuah Khan         2021-03-07  169  		get_task_struct(tcp_rx);
cd66a6ca11e971 Shuah Khan         2021-03-07  170  		get_task_struct(tcp_tx);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  171  
cd66a6ca11e971 Shuah Khan         2021-03-07  172  		/* lock and update udc->ud state */
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  173  		spin_lock_irqsave(&udc->lock, flags);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  174  		spin_lock_irq(&udc->ud.lock);
cd66a6ca11e971 Shuah Khan         2021-03-07  175  
cd66a6ca11e971 Shuah Khan         2021-03-07  176  		udc->ud.tcp_socket = socket;
cd66a6ca11e971 Shuah Khan         2021-03-07  177  		udc->ud.tcp_rx = tcp_rx;
f345de0d2e51a2 Colin Ian King     2021-03-11  178  		udc->ud.tcp_tx = tcp_tx;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  179  		udc->ud.status = SDEV_ST_USED;
cd66a6ca11e971 Shuah Khan         2021-03-07  180  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  181  		spin_unlock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  182  
6c51441cd07103 Arnd Bergmann      2017-11-07  183  		ktime_get_ts64(&udc->start_time);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  184  		v_start_timer(udc);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  185  		udc->connected = 1;
cd66a6ca11e971 Shuah Khan         2021-03-07  186  
cd66a6ca11e971 Shuah Khan         2021-03-07  187  		spin_unlock_irqrestore(&udc->lock, flags);
cd66a6ca11e971 Shuah Khan         2021-03-07  188  
cd66a6ca11e971 Shuah Khan         2021-03-07  189  		wake_up_process(udc->ud.tcp_rx);
cd66a6ca11e971 Shuah Khan         2021-03-07  190  		wake_up_process(udc->ud.tcp_tx);
5022f2ccbf54a0 Shuah Khan         2021-03-26  191  
5022f2ccbf54a0 Shuah Khan         2021-03-26  192  		mutex_unlock(&udc->ud.sysfs_lock);
cd66a6ca11e971 Shuah Khan         2021-03-07  193  		return count;
cd66a6ca11e971 Shuah Khan         2021-03-07  194  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  195  	} else {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  196  		if (!udc->connected) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  197  			dev_err(dev, "Device not connected");
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  198  			ret = -EINVAL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  199  			goto unlock;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  200  		}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  201  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  202  		spin_lock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  203  		if (udc->ud.status != SDEV_ST_USED) {
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  204  			ret = -EINVAL;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  205  			goto unlock_ud;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  206  		}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  207  		spin_unlock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  208  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  209  		usbip_event_add(&udc->ud, VUDC_EVENT_DOWN);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  210  	}
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  211  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  212  	spin_unlock_irqrestore(&udc->lock, flags);
5022f2ccbf54a0 Shuah Khan         2021-03-26  213  	mutex_unlock(&udc->ud.sysfs_lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  214  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  215  	return count;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  216  
52b49d2f7d277b Shuah Khan         2021-03-03  217  sock_err:
52b49d2f7d277b Shuah Khan         2021-03-03  218  	sockfd_put(socket);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  219  unlock_ud:
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  220  	spin_unlock_irq(&udc->ud.lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  221  unlock:
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  222  	spin_unlock_irqrestore(&udc->lock, flags);
5022f2ccbf54a0 Shuah Khan         2021-03-26  223  	mutex_unlock(&udc->ud.sysfs_lock);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  224  
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  225  	return ret;
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  226  }
ca35910a1ba21e Greg Kroah-Hartman 2018-01-23  227  static DEVICE_ATTR_WO(usbip_sockfd);
ea6873a45a22f3 Igor Kotrasinski   2016-03-08  228  

:::::: The code at line 159 was first introduced by commit
:::::: cd66a6ca11e971d46af3a93b7e8758f46693f62f usbip: fix vudc usbip_sockfd_store races leading to gpf

:::::: TO: Shuah Khan <skhan@linuxfoundation.org>
:::::: CC: Shuah Khan <skhan@linuxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 65060 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-03-27  6:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-27  6:52 [shuah:usbip_test 11/12] drivers/usb/usbip/vudc_sysfs.c:159:3-9: preceding lock on line 115 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.