On Wed, Oct 17, 2001 at 08:39:09AM +0200, Oliver Neukum wrote:
>
> In your open() method you do MOD_INC_USE_COUNT last.
> This is bad. Your module may be unloaded while you sleep on down() before.
> You must use MOD_INC_USE_COUNT before the first down() and decrement it in
> the error case.
Good catch, thanks for looking at this. No use letting old races get
into code after we had audited all of the drivers for this :)
Here's a patch relative to David's original patch that fixes this
problem.
As 2.4.13-pre4 came out without the scanner patch, I'll resubmit it to
Linus with this change.
thanks,
greg k-h
diff --minimal -Nru a/drivers/usb/scanner.c b/drivers/usb/scanner.c
--- a/drivers/usb/scanner.c Wed Oct 17 16:45:33 2001
+++ b/drivers/usb/scanner.c Wed Oct 17 16:45:33 2001
@@ -348,6 +348,8 @@
int err=0;
+ MOD_INC_USE_COUNT;
+
down(&scn_mutex);
scn_minor = USB_SCN_MINOR(inode);
@@ -392,11 +394,13 @@
file->private_data = scn; /* Used by the read and write methods */
- MOD_INC_USE_COUNT;
out_error:
up(&(scn->sem)); /* Wake up any possible contending processes */
+
+ if (err)
+ MOD_DEC_USE_COUNT;
return err;
}
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel