Hi,
speedtouch povides an ioctl handler through usbfs.
It must not be reentered. A semaphore ensures that.
Regards
Oliver
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
===================================================================
[EMAIL PROTECTED], 2002-12-18 15:39:05+01:00, [EMAIL PROTECTED]
- fix ioctl reentrancy race
speedtouch.c | 12 ++++++++----
1 files changed, 8 insertions(+), 4 deletions(-)
diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
--- a/drivers/usb/misc/speedtouch.c Wed Dec 18 15:39:28 2002
+++ b/drivers/usb/misc/speedtouch.c Wed Dec 18 15:39:28 2002
@@ -146,6 +146,7 @@
/* data thread */
DECLARE_WAIT_QUEUE_HEAD (udsl_wqh);
static DECLARE_COMPLETION(thread_grave);
+static DECLARE_MUTEX(udsl_usb_ioctl_lock);
static unsigned int datapid;
#ifdef DEBUG_PACKET
@@ -890,7 +891,7 @@
{
struct usb_device *dev = interface_to_usbdev (intf);
struct udsl_instance_data *instance;
- int i;
+ int i,retval;
for (i = 0; i < MAX_UDSL; i++)
if (minor_data[i] && (minor_data[i]->usb_dev == dev))
@@ -901,17 +902,20 @@
instance = minor_data[i];
+ down(&udsl_usb_ioctl_lock);
switch (code) {
case UDSL_IOCTL_START:
- return udsl_usb_data_init (instance);
+ retval = udsl_usb_data_init (instance);
break;
case UDSL_IOCTL_STOP:
- return udsl_usb_data_exit (instance);
+ retval = udsl_usb_data_exit (instance);
break;
default:
+ retval = -ENOTTY;
break;
}
- return -EINVAL;
+ up(&udsl_usb_ioctl_lock);
+ return retval;
}
static int udsl_usb_probe (struct usb_interface *intf, const struct usb_device_id *id)
===================================================================
This BitKeeper patch contains the following changesets:
1.1122
## Wrapped with gzip_uu ##
begin 664 bkpatch5128
M'XL(`*"(`#X``ZU4:VO;,!3];/V*"X71T3F69/FAE(QN;=C"'@U="MNGX,B*
M;>)819;[`/_XR7:7T;&&KJL17%E7Y^C<JX,.X+*6>NRHLKB6&AW`1U4;^RLK
M5<E1KK:R+*KF=J1T9I,72MFDURU[`\);;5RCI:R]3-,`V3WSQ(@<;*H>.V3D
M[U;,W94<.Q?3#Y>?WUT@-)G`:9Y4F?PF#4PF:+4Y21M9CC9:)7EW7+M+MQ1C
M0@@-L!^$)&AI[/NL)2%>I7::THBO5R%'@Z"3OTE_R$4))3%A-`I8RP+.0G0&
M9&0/H("I1^R(@01CGX]Q<(3)&&/8PPU'!%R,WL/_5W"*!+BP+FZA4,*48/M:
M&9U4X@YT(B3Z!%9NX*/Y[]8A]Q\_A'""T5O(M,Q.!JE";=M4=P767E.OO&U1
M"Z^^DC(UJA$VWS<-QS3J(HU;S((H;#OM:\(99S''0;K>UZ0G\`^7XELJVYXH
M9+U%]L(ZV[Q\&7M]]-0R>F^1B)%[;T7/<U8,+GM!9Q7632IMA+SO*V2E6B4E
ME$IL8*WTO>U,KE63Y6"+7-?6=,-UG(.K;_IA333??S//<.6,,-L;5)O$%`+.
MIJ?VE9@NOUPNIM\/F[0NE_:@9:]OV<E]?8S.8NY;Q&P(CBT.BC=:FNND/$8S
MCOO55-U4AZ\>(>`X[`B&X#@#%B:PVYXF)ED656'@L*BLM$K(`<<''-^'D[=_
MX&:<D(<`=_KU?+'XT5$2UE/:0)'37#VFN<,VNH)?=>Z>5Y%+L:F;[22)_#"A
,TD<_`1?EPY3;!0``
`
end
-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel