Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision 70fae4e234e6148cb91bf67a329949ac7f16b494)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision 831aa4662588ca87829e9696a552444604b9a056)
@@ -102,5 +102,7 @@
 	if (dev->speed >= USB_SPEED_HIGH ||
 	    ep->transfer_type != USB_TRANSFER_INTERRUPT) {
-		xhci_ep->interval = 1 << (xhci_ep->interval - 1);
+
+		if (xhci_ep->interval > 0)
+			xhci_ep->interval = 1 << (xhci_ep->interval - 1);
 	}
 
Index: uspace/lib/c/generic/ubsan.c
===================================================================
--- uspace/lib/c/generic/ubsan.c	(revision 70fae4e234e6148cb91bf67a329949ac7f16b494)
+++ uspace/lib/c/generic/ubsan.c	(revision 831aa4662588ca87829e9696a552444604b9a056)
@@ -98,4 +98,5 @@
 #endif
 void __ubsan_handle_nonnull_return(struct nonnull_return_data *data);
+void __ubsan_handle_builtin_unreachable(struct unreachable_data *data);
 
 static void print_loc(const char *func, struct source_location *loc)
@@ -107,5 +108,5 @@
 		f += sizeof(func_prefix);
 
-	PRINTF("Undefined behavior %s at %s:%" PRIu32 " col %" PRIu32 "\n",
+	PRINTF("####### Undefined behavior %s at %s:%" PRIu32 " col %" PRIu32 "\n",
 	    f, loc->file_name, loc->line, loc->column);
 }
@@ -115,4 +116,6 @@
 {
 	print_loc(__func__, &data->loc);
+	PRINTF("Type: %s, alignment: %lu, type_check_kind: %hhu\n",
+	    data->type->type_name, data->alignment, data->type_check_kind);
 	ubsan_panic();
 }
@@ -219,2 +222,9 @@
 	ubsan_panic();
 }
+
+void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
+{
+	print_loc(__func__, &data->loc);
+	ubsan_panic();
+}
+
Index: uspace/lib/drv/generic/remote_usb.c
===================================================================
--- uspace/lib/drv/generic/remote_usb.c	(revision 70fae4e234e6148cb91bf67a329949ac7f16b494)
+++ uspace/lib/drv/generic/remote_usb.c	(revision 831aa4662588ca87829e9696a552444604b9a056)
@@ -77,15 +77,19 @@
 		return EBADMEM;
 
-	usb_device_desc_t tmp_desc;
+	sysarg_t address, depth, speed, handle, iface;
 
 	const errno_t ret = async_req_1_5(exch, DEV_IFACE_ID(USB_DEV_IFACE),
-	    IPC_M_USB_GET_MY_DESCRIPTION,
-	    (sysarg_t *) &tmp_desc.address,
-	    (sysarg_t *) &tmp_desc.depth,
-	    (sysarg_t *) &tmp_desc.speed,
-	    &tmp_desc.handle,
-	    (sysarg_t *) &tmp_desc.iface);
-	if (ret == EOK && desc)
-		*desc = tmp_desc;
+	    IPC_M_USB_GET_MY_DESCRIPTION, &address, &depth, &speed, &handle,
+	    &iface);
+	if (ret == EOK && desc) {
+		*desc = (usb_device_desc_t) {
+			.address = address,
+			.depth = depth,
+			.speed = speed,
+			.handle = handle,
+			.iface = iface,
+		};
+	}
+
 	return ret;
 }
Index: uspace/lib/usb/include/usb/request.h
===================================================================
--- uspace/lib/usb/include/usb/request.h	(revision 70fae4e234e6148cb91bf67a329949ac7f16b494)
+++ uspace/lib/usb/include/usb/request.h	(revision 831aa4662588ca87829e9696a552444604b9a056)
@@ -75,13 +75,4 @@
 #define USB_SETUP_PACKET_SIZE 8
 
-/** Device request setup packet.
- * The setup packet describes the request.
- */
-typedef struct {
-	/** Request type.
-	 * The type combines transfer direction, request type and
-	 * intended recipient.
-	 */
-	uint8_t request_type;
 #define SETUP_REQUEST_TYPE_DEVICE_TO_HOST (1 << 7)
 #define SETUP_REQUEST_TYPE_HOST_TO_DEVICE (0 << 7)
@@ -94,21 +85,34 @@
     (uint8_t)(((type & 0x3) << 5) | (recipient & 0x1f))
 
-	/** Request identification. */
-	uint8_t request;
-	/** Main parameter to the request. */
-	union __attribute__((packed)) {
-		uint16_t value;
-		/* FIXME: add #ifdefs according to host endianness */
-		struct __attribute__((packed)) {
-			uint8_t value_low;
-			uint8_t value_high;
+/** Device request setup packet.
+ * The setup packet describes the request.
+ */
+typedef union {
+	struct __attribute__((packed)) {
+		/** Request type.
+		 * The type combines transfer direction, request type and
+		 * intended recipient.
+		 */
+		uint8_t request_type;
+
+		/** Request identification. */
+		uint8_t request;
+		/** Main parameter to the request. */
+		union __attribute__((packed)) {
+			uint16_t value;
+			/* FIXME: add #ifdefs according to host endianness */
+			struct __attribute__((packed)) {
+				uint8_t value_low;
+				uint8_t value_high;
+			};
 		};
+		/** Auxiliary parameter to the request.
+		 * Typically, it is offset to something.
+		 */
+		uint16_t index;
+		/** Length of extra data. */
+		uint16_t length;
 	};
-	/** Auxiliary parameter to the request.
-	 * Typically, it is offset to something.
-	 */
-	uint16_t index;
-	/** Length of extra data. */
-	uint16_t length;
+	uint64_t raw;
 } __attribute__((packed)) usb_device_request_setup_packet_t;
 
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision 70fae4e234e6148cb91bf67a329949ac7f16b494)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision 831aa4662588ca87829e9696a552444604b9a056)
@@ -142,5 +142,5 @@
 	usb_log_debug("Device(%d): Setting USB address.", address);
 	err = bus_device_send_batch_sync(dev, usb2_default_target, USB_DIRECTION_OUT,
-	    NULL, 0, *(uint64_t *)&set_address, "set address", NULL);
+	    NULL, 0, set_address.raw, "set address", NULL);
 	if (err) {
 		usb_log_error("Device(%d): Failed to set new address: %s.",
