Index: /trunk/include/VBox/usblib-solaris.h
===================================================================
--- /trunk/include/VBox/usblib-solaris.h	(revision 43815)
+++ /trunk/include/VBox/usblib-solaris.h	(revision 43816)
@@ -127,4 +127,5 @@
     VUSBDIRECTION           enmDir;             /* Xfer direction */
     VUSBSTATUS              enmStatus;          /* URB status */
+    bool                    fShortOk;           /* Whether receiving less data than requested is acceptable. */
     size_t                  cbData;             /* Size of the data */
     void                   *pvData;             /* Pointer to the data */
Index: /trunk/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp
===================================================================
--- /trunk/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp	(revision 43815)
+++ /trunk/src/VBox/Devices/USB/solaris/USBProxyDevice-solaris.cpp	(revision 43816)
@@ -610,4 +610,5 @@
     UrbReq.enmDir       = pUrb->enmDir;
     UrbReq.enmStatus    = pUrb->enmStatus;
+    UrbReq.fShortOk     = !pUrb->fShortNotOk;
     UrbReq.cbData       = pUrb->cbData;
     UrbReq.pvData       = pUrb->abData;
Index: /trunk/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c	(revision 43815)
+++ /trunk/src/VBox/HostDrivers/VBoxUSB/solaris/VBoxUSB-solaris.c	(revision 43816)
@@ -250,4 +250,5 @@
     VUSBDIRECTION           enmDir;          /* Xfer direction */
     VUSBSTATUS              enmStatus;       /* URB status */
+    bool                    fShortOk;        /* Whether receiving less data than requested is acceptable. */
     RTR3PTR                 pvDataR3;        /* Userspace address of the original data buffer */
     size_t                  cbDataR3;        /* Size of the data buffer */
@@ -3105,8 +3106,14 @@
          * Initialize callbacks and timeouts.
          */
+        usb_req_attrs_t fAttributes = USB_ATTRS_AUTOCLEARING;
+        if (   pUrb->enmDir == VUSBDIRECTION_IN
+            && pUrb->fShortOk)
+        {
+            fAttributes |= USB_ATTRS_SHORT_XFER_OK;
+        }
         pReq->ctrl_cb             = vboxUSBSolarisCtrlXferCompleted;
         pReq->ctrl_exc_cb         = vboxUSBSolarisCtrlXferCompleted;
         pReq->ctrl_timeout        = VBOXUSB_CTRL_XFER_TIMEOUT;
-        pReq->ctrl_attributes     = USB_ATTRS_AUTOCLEARING | (pUrb->enmDir == VUSBDIRECTION_IN ? USB_ATTRS_SHORT_XFER_OK : 0);
+        pReq->ctrl_attributes     = fAttributes;
 
         pReq->ctrl_client_private = (usb_opaque_t)pUrb;
@@ -3234,6 +3241,12 @@
          * Initialize Bulk Xfer, callbacks and timeouts.
          */
+        usb_req_attrs_t fAttributes = USB_ATTRS_AUTOCLEARING;
         if (pUrb->enmDir == VUSBDIRECTION_OUT)
             pReq->bulk_data = pUrb->pMsg;
+        else if (   pUrb->enmDir == VUSBDIRECTION_IN
+                 && pUrb->fShortOk)
+        {
+            fAttributes |= USB_ATTRS_SHORT_XFER_OK;
+        }
 
         pReq->bulk_len            = pUrb->cbDataR3;
@@ -3241,5 +3254,5 @@
         pReq->bulk_exc_cb         = vboxUSBSolarisBulkXferCompleted;
         pReq->bulk_timeout        = VBOXUSB_BULK_XFER_TIMEOUT;
-        pReq->bulk_attributes     = USB_ATTRS_AUTOCLEARING | (pUrb->enmDir == VUSBDIRECTION_IN ? USB_ATTRS_SHORT_XFER_OK : 0);
+        pReq->bulk_attributes     = fAttributes;
         pReq->bulk_client_private = (usb_opaque_t)pUrb;
 
@@ -3358,6 +3371,7 @@
         else
         {
+            Assert(pUrb->enmDir == VUSBDIRECTION_IN);
             pReq->intr_data       = NULL;
-            pReq->intr_attributes = USB_ATTRS_AUTOCLEARING | USB_ATTRS_ONE_XFER | USB_ATTRS_SHORT_XFER_OK;
+            pReq->intr_attributes = USB_ATTRS_AUTOCLEARING | USB_ATTRS_ONE_XFER | (pUrb->fShortOk ? USB_ATTRS_SHORT_XFER_OK : 0);
         }
 
