I've found minor errors in usb-skeleton.c. First, there is no valid value of interface->minor in assignment to dev->minor. Second, when calling usb_deregister_dev the interface->minor must be valid or else minor isn't deregistered.
Michal Sojka
diff -ur linux-2.6.0-test2/drivers/usb/usb-skeleton.c edited-2.6.0-test2/drivers/usb/usb-skeleton.c --- linux-2.6.0-test2/drivers/usb/usb-skeleton.c 2003-08-06 11:23:13.936918128 +0200 +++ edited-2.6.0-test2/drivers/usb/usb-skeleton.c 2003-08-06 11:20:34.000000000 +0200 @@ -526,7 +526,6 @@ init_MUTEX (&dev->sem); dev->udev = udev; dev->interface = interface; - dev->minor = interface->minor; /* set up the endpoint information */ /* check out the endpoints */ @@ -606,6 +605,7 @@ goto error; } + dev->minor = interface->minor; /* let the user know what node this device is now attached to */ info ("USB Skeleton device now attached to USBSkel-%d", dev->minor); @@ -641,9 +641,6 @@ down (&dev->sem); - /* disable open() */ - interface->minor = -1; - minor = dev->minor; /* give back our minor */