* [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.