Index: /trunk/src/VBox/Additions/linux/module/vboxmod.c
===================================================================
--- /trunk/src/VBox/Additions/linux/module/vboxmod.c	(revision 15986)
+++ /trunk/src/VBox/Additions/linux/module/vboxmod.c	(revision 15987)
@@ -480,6 +480,7 @@
 /** Unlock R3 memory after the HGCM call.  Copied from HGCMInternal.cpp and
  * SysHlp.cpp */
-static void vboxadd_unbuffer_hgcm_parms(void **ppvCtx, VBoxGuestHGCMCallInfo *pCallInfo)
-{
+static int vboxadd_unbuffer_hgcm_parms(void **ppvCtx, VBoxGuestHGCMCallInfo *pCallInfo)
+{
+    int rc = 0;
     unsigned iParm;
     /* Unlock user buffers. */
@@ -495,15 +496,18 @@
             {
                 hgcm_jump_buffer *MemObj = (hgcm_jump_buffer *)ppvCtx[iParm];
-#ifdef VBOX_STRICT
-                int rc = vboxadd_hgcm_free_buffer(MemObj);
-                Assert(rc >= 0);  /* vboxadd_hgcm_unbuffer_user logs this. */
-#else
-                vboxadd_hgcm_free_buffer(MemObj);
-#endif
+                int rc2 = vboxadd_hgcm_free_buffer(MemObj);
+                if (rc >= 0 && rc2 < 0)
+                    rc = rc2;  /* Report the first error. */
             }
         }
         else
-            Assert(!ppvCtx[iParm]);
-    }
+            if (ppvCtx[iParm] != NULL)
+            {
+                AssertFailed();
+                rc = -EOVERFLOW;  /* Something unlikely to turn up elsewhere so
+                                   * we can see where it's coming from. */
+            }
+    }
+    return rc;
 }
 
@@ -557,5 +561,9 @@
         }
         if (haveParms)
-            vboxadd_unbuffer_hgcm_parms(apvCtx, pInfo);
+        {
+            int rc2 = vboxadd_unbuffer_hgcm_parms(apvCtx, pInfo);
+            if (rc >= 0 && rc2 < 0)
+                rc = rc2;
+        }
         if (pInfo != NULL)
             kfree(pInfo);
@@ -614,5 +622,9 @@
         }
         if (haveParms)
-            vboxadd_unbuffer_hgcm_parms(apvCtx, &pInfo->info);
+        {
+            int rc2 = vboxadd_unbuffer_hgcm_parms(apvCtx, &pInfo->info);
+            if (rc >= 0 && rc2 < 0)
+                rc = rc2;
+        }
         if (pInfo != NULL)
             kfree(pInfo);
