Index: uspace/lib/usbdev/src/altiface.c
===================================================================
--- uspace/lib/usbdev/src/altiface.c	(revision 0255d36f75be45d449b7cf8e309c120136955625)
+++ uspace/lib/usbdev/src/altiface.c	(revision 69b9740e59780c7c4b0c729b8317a12ad795eac7)
@@ -127,11 +127,14 @@
 	};
 
-	usb_alternate_interface_descriptors_t *cur_alt_iface
+	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) {
+	while (iface_ptr != NULL && iterator < end) {
 		const usb_standard_interface_descriptor_t *iface = iface_ptr;
 
@@ -145,6 +148,6 @@
 		}
 
-		cur_alt_iface->interface = iface;
-		cur_alt_iface->nested_descriptors = iface_ptr + sizeof(*iface);
+		iterator->interface = iface;
+		iterator->nested_descriptors = iface_ptr + sizeof(*iface);
 
 		/* Find next interface to count size of nested descriptors. */
@@ -155,8 +158,8 @@
 		    dp_data.data + dp_data.size : iface_ptr;
 
-		cur_alt_iface->nested_descriptors_size
-		    = next - cur_alt_iface->nested_descriptors;
+		iterator->nested_descriptors_size
+		    = next - iterator->nested_descriptors;
 
-		++cur_alt_iface;
+		++iterator;
 	}
 
