Index: uspace/lib/usbdev/include/usb/dev/driver.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/driver.h	(revision 6785b538d1d589cbbed2c1fbe3c6dc068f7c0a05)
+++ uspace/lib/usbdev/include/usb/dev/driver.h	(revision b6812a1f9a954398c35656fde6deca4d15049de3)
@@ -59,5 +59,5 @@
 typedef struct {
 	/** Array of alternate interfaces descriptions. */
-	usb_alternate_interface_descriptors_t *alternatives;
+	const usb_alternate_interface_descriptors_t *alternatives;
 	/** Size of @c alternatives array. */
 	size_t alternative_count;
@@ -89,5 +89,4 @@
 	 */
 	int interface_no;
-
 	/** Alternative interfaces. */
 	usb_alternate_interfaces_t alternate_interfaces;
Index: uspace/lib/usbdev/src/altiface.c
===================================================================
--- uspace/lib/usbdev/src/altiface.c	(revision 6785b538d1d589cbbed2c1fbe3c6dc068f7c0a05)
+++ uspace/lib/usbdev/src/altiface.c	(revision b6812a1f9a954398c35656fde6deca4d15049de3)
@@ -105,15 +105,14 @@
 	}
 
-	alternates->alternative_count
-	    = usb_interface_count_alternates(config_descr, config_descr_size,
-	        interface_number);
+	const size_t alt_count =usb_interface_count_alternates(config_descr,
+	    config_descr_size, interface_number);
 
-	if (alternates->alternative_count == 0) {
+	if (alt_count == 0) {
 		return ENOENT;
 	}
 
-	alternates->alternatives = calloc(alternates->alternative_count,
+	usb_alternate_interface_descriptors_t *alts = calloc(alt_count,
 	    sizeof(usb_alternate_interface_descriptors_t));
-	if (alternates->alternatives == NULL) {
+	if (alts == NULL) {
 		return ENOMEM;
 	}
@@ -128,14 +127,10 @@
 	};
 
-	usb_alternate_interface_descriptors_t *iterator
-	    = &alternates->alternatives[0];
-
-	const usb_alternate_interface_descriptors_t *end
-	    = &alternates->alternatives[alternates->alternative_count];
 
 	const void *iface_ptr =
 	    usb_dp_get_nested_descriptor(&dp_parser, &dp_data, dp_data.data);
 
-	while (iface_ptr != NULL && iterator < end) {
+	usb_alternate_interface_descriptors_t *iterator = alts;
+	for (; iface_ptr != NULL && iterator < &alts[alt_count]; ++iterator) {
 		const usb_standard_interface_descriptor_t *iface = iface_ptr;
 
@@ -165,4 +160,7 @@
 	}
 
+	alternates->alternatives = alts;
+	alternates->alternative_count = alt_count;
+
 	return EOK;
 }
