--- drivers/usb/class/cdc-acm.c.orig	2004-04-15 20:04:47.000000000 +0200
+++ drivers/usb/class/cdc-acm.c	2004-04-15 21:20:00.255123616 +0200
@@ -585,10 +585,6 @@
 
 		for (j = 0; j < cfacm->desc.bNumInterfaces - 1; j++) {
 		    
-			if (usb_interface_claimed(cfacm->interface[j]) ||
-			    usb_interface_claimed(cfacm->interface[j + 1]))
-				continue;
-
 			/* We know we're probe()d with the control interface.
 			 * FIXME ACM doesn't guarantee the data interface is
 			 * adjacent to the control interface, or that if one
@@ -696,7 +692,13 @@
 			acm->line.databits = 8;
 			acm_set_line(acm, &acm->line);
 
-			usb_driver_claim_interface(&acm_driver, data, acm);
+			if ( (j = usb_driver_claim_interface(&acm_driver, data, acm)) != 0) {
+				err("claim failed");
+				usb_free_urb(acm->ctrlurb);
+				kfree(acm);
+				kfree(buf);
+				return j;
+			} 
 
 			tty_register_device(acm_tty_driver, minor, &intf->dev);
 
