Index: uspace/drv/bus/usb/xhci/trb_ring.c
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.c	(revision 3cbc13810aff9f4cf30104fc6ba3bacf0af5eb1b)
+++ uspace/drv/bus/usb/xhci/trb_ring.c	(revision 47ab89ec6a06ed4cb2f376c53a4c4f3dc79d1f48)
@@ -123,9 +123,11 @@
 int xhci_trb_ring_fini(xhci_trb_ring_t *ring)
 {
-	if (!ring)
-		return EOK;
-
-	list_foreach(ring->segments, segments_link, trb_segment_t, segment)
+	assert(ring);
+
+	list_foreach_safe(ring->segments, cur, next) {
+		trb_segment_t *segment = list_get_instance(cur, trb_segment_t, segments_link);
 		dmamem_unmap_anonymous(segment);
+	}
+
 	return EOK;
 }
@@ -293,6 +295,8 @@
 int xhci_event_ring_fini(xhci_event_ring_t *ring)
 {
-	list_foreach(ring->segments, segments_link, trb_segment_t, segment)
+	list_foreach_safe(ring->segments, cur, next) {
+		trb_segment_t *segment = list_get_instance(cur, trb_segment_t, segments_link);
 		dmamem_unmap_anonymous(segment);
+	}
 
 	if (ring->erst)
