Index: /trunk/src/VBox/Devices/Audio/DevHda.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevHda.cpp	(revision 91686)
+++ /trunk/src/VBox/Devices/Audio/DevHda.cpp	(revision 91687)
@@ -191,4 +191,6 @@
     HDADRIVERSTREAM                    Rear;
 #endif
+    /** The LUN description. */
+    char                               szDesc[48 - 2];
 } HDADRIVER;
 /** The HDA host driver backend. */
@@ -4526,64 +4528,56 @@
 static int hdaR3AttachInternal(PPDMDEVINS pDevIns, PHDASTATE pThis, PHDASTATER3 pThisCC, unsigned uLUN, PHDADRIVER *ppDrv)
 {
-    /*
-     * Attach driver.
-     */
-    char *pszDesc = RTStrAPrintf2("Audio driver port (HDA) for LUN#%u", uLUN);
-    AssertLogRelReturn(pszDesc, VERR_NO_STR_MEMORY);
+    PHDADRIVER pDrv = (PHDADRIVER)RTMemAllocZ(sizeof(HDADRIVER));
+    AssertPtrReturn(pDrv, VERR_NO_MEMORY);
+    RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (HDA) for LUN #%u", uLUN);
 
     PPDMIBASE pDrvBase;
-    int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, pszDesc);
+    int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, pDrv->szDesc);
     if (RT_SUCCESS(rc))
     {
-        PHDADRIVER pDrv = (PHDADRIVER)RTMemAllocZ(sizeof(HDADRIVER));
-        if (pDrv)
-        {
-            pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR);
-            AssertPtr(pDrv->pConnector);
-            if (RT_VALID_PTR(pDrv->pConnector))
+        pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR);
+        AssertPtr(pDrv->pConnector);
+        if (RT_VALID_PTR(pDrv->pConnector))
+        {
+            pDrv->pDrvBase          = pDrvBase;
+            pDrv->pHDAStateShared   = pThis;
+            pDrv->pHDAStateR3       = pThisCC;
+            pDrv->uLUN              = uLUN;
+
+            /* Attach to driver list if not attached yet. */
+            if (!pDrv->fAttached)
             {
-                pDrv->pDrvBase          = pDrvBase;
-                pDrv->pHDAStateShared   = pThis;
-                pDrv->pHDAStateR3       = pThisCC;
-                pDrv->uLUN              = uLUN;
-
-                /* Attach to driver list if not attached yet. */
-                if (!pDrv->fAttached)
-                {
-                    RTListAppend(&pThisCC->lstDrv, &pDrv->Node);
-                    pDrv->fAttached = true;
-                }
-
-                if (ppDrv)
-                    *ppDrv = pDrv;
-
-                /*
-                 * While we're here, give the windows backends a hint about our typical playback
-                 * configuration.
-                 * Note! If 48000Hz is advertised to the guest, add it here.
-                 */
-                if (   pDrv->pConnector
-                    && pDrv->pConnector->pfnStreamConfigHint)
-                {
-                    PDMAUDIOSTREAMCFG Cfg;
-                    RT_ZERO(Cfg);
-                    Cfg.enmDir                        = PDMAUDIODIR_OUT;
-                    Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
-                    Cfg.Device.cMsSchedulingHint      = 10;
-                    Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
-                    PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100);
-                    RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)");
-
-                    pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
-                }
-
-                LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector));
-                return VINF_SUCCESS;
+                RTListAppend(&pThisCC->lstDrv, &pDrv->Node);
+                pDrv->fAttached = true;
             }
 
-            rc = VERR_PDM_MISSING_INTERFACE_BELOW;
-        }
-        else
-            rc = VERR_NO_MEMORY;
+            if (ppDrv)
+                *ppDrv = pDrv;
+
+            /*
+             * While we're here, give the windows backends a hint about our typical playback
+             * configuration.
+             * Note! If 48000Hz is advertised to the guest, add it here.
+             */
+            if (   pDrv->pConnector
+                && pDrv->pConnector->pfnStreamConfigHint)
+            {
+                PDMAUDIOSTREAMCFG Cfg;
+                RT_ZERO(Cfg);
+                Cfg.enmDir                        = PDMAUDIODIR_OUT;
+                Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
+                Cfg.Device.cMsSchedulingHint      = 10;
+                Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
+                PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100);
+                RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)");
+
+                pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
+            }
+
+            LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector));
+            return VINF_SUCCESS;
+        }
+
+        rc = VERR_PDM_MISSING_INTERFACE_BELOW;
     }
     else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
@@ -4591,6 +4585,6 @@
     else
         LogFunc(("Failed attaching driver for LUN #%u: %Rrc\n", uLUN, rc));
-
-    RTStrFree(pszDesc);
+    RTMemFree(pDrv);
+
     LogFunc(("LUN#%u: rc=%Rrc\n", uLUN, rc));
     return rc;
Index: /trunk/src/VBox/Devices/Audio/DevIchAc97.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevIchAc97.cpp	(revision 91686)
+++ /trunk/src/VBox/Devices/Audio/DevIchAc97.cpp	(revision 91687)
@@ -515,6 +515,4 @@
     bool                            fAttached;
     uint8_t                         abPadding[6];
-    /** Pointer to the description string passed to PDMDevHlpDriverAttach(). */
-    R3PTRTYPE(char *)               pszDesc;
     /** Pointer to attached driver base interface. */
     R3PTRTYPE(PPDMIBASE)            pDrvBase;
@@ -527,4 +525,6 @@
     /** Driver stream for output. */
     AC97DRIVERSTREAM                Out;
+    /** The LUN description. */
+    char                            szDesc[48 - 2];
 } AC97DRIVER;
 /** Pointer to a host backend driver (LUN). */
@@ -4145,88 +4145,82 @@
  * @param   pDevIns     The device instance.
  * @param   pThisCC     The ring-3 AC'97 device state.
- * @param   iLun        The logical unit which is being attached.
+ * @param   uLUN        The logical unit which is being attached.
  * @param   ppDrv       Attached driver instance on success. Optional.
  */
-static int ichac97R3AttachInternal(PPDMDEVINS pDevIns, PAC97STATER3 pThisCC, unsigned iLun, PAC97DRIVER *ppDrv)
+static int ichac97R3AttachInternal(PPDMDEVINS pDevIns, PAC97STATER3 pThisCC, unsigned uLUN, PAC97DRIVER *ppDrv)
 {
     /*
-     * Attach driver.
+     * Allocate a new driver structure and try attach the driver.
      */
-    char *pszDesc = RTStrAPrintf2("Audio driver port (AC'97) for LUN #%u", iLun);
-    AssertLogRelReturn(pszDesc, VERR_NO_STR_MEMORY);
+    PAC97DRIVER pDrv = (PAC97DRIVER)RTMemAllocZ(sizeof(AC97DRIVER));
+    AssertPtrReturn(pDrv, VERR_NO_MEMORY);
+    RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (AC'97) for LUN #%u", uLUN);
 
     PPDMIBASE pDrvBase;
-    int rc = PDMDevHlpDriverAttach(pDevIns, iLun, &pThisCC->IBase, &pDrvBase, pszDesc);
+    int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, pDrv->szDesc);
     if (RT_SUCCESS(rc))
     {
-        PAC97DRIVER pDrv = (PAC97DRIVER)RTMemAllocZ(sizeof(AC97DRIVER));
-        if (pDrv)
+       pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR);
+        AssertPtr(pDrv->pConnector);
+        if (RT_VALID_PTR(pDrv->pConnector))
         {
-            pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR);
-            AssertPtr(pDrv->pConnector);
-            if (RT_VALID_PTR(pDrv->pConnector))
+            pDrv->pDrvBase   = pDrvBase;
+            pDrv->uLUN       = uLUN;
+
+            /* Attach to driver list if not attached yet. */
+            if (!pDrv->fAttached)
             {
-                pDrv->pDrvBase   = pDrvBase;
-                pDrv->uLUN       = iLun;
-                pDrv->pszDesc    = pszDesc;
-
-                /* Attach to driver list if not attached yet. */
-                if (!pDrv->fAttached)
-                {
-                    RTListAppend(&pThisCC->lstDrv, &pDrv->Node);
-                    pDrv->fAttached = true;
-                }
-
-                if (ppDrv)
-                    *ppDrv = pDrv;
-
-                /*
-                 * While we're here, give the windows backends a hint about our typical playback
-                 * configuration.
-                 */
-                if (   pDrv->pConnector
-                    && pDrv->pConnector->pfnStreamConfigHint)
-                {
-                    /* 48kHz */
-                    PDMAUDIOSTREAMCFG Cfg;
-                    RT_ZERO(Cfg);
-                    Cfg.enmDir                        = PDMAUDIODIR_OUT;
-                    Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
-                    Cfg.Device.cMsSchedulingHint      = 5;
-                    Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
-                    PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 48000);
-                    RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 48kHz 2ch S16 (HDA config hint)");
-
-                    pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
+                RTListAppend(&pThisCC->lstDrv, &pDrv->Node);
+                pDrv->fAttached = true;
+            }
+
+            if (ppDrv)
+                *ppDrv = pDrv;
+
+            /*
+             * While we're here, give the windows backends a hint about our typical playback
+             * configuration.
+             */
+            if (   pDrv->pConnector
+                && pDrv->pConnector->pfnStreamConfigHint)
+            {
+                /* 48kHz */
+                PDMAUDIOSTREAMCFG Cfg;
+                RT_ZERO(Cfg);
+                Cfg.enmDir                        = PDMAUDIODIR_OUT;
+                Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
+                Cfg.Device.cMsSchedulingHint      = 5;
+                Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
+                PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 48000);
+                RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 48kHz 2ch S16 (HDA config hint)");
+
+                pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
 # if 0
-                    /* 44.1kHz */
-                    RT_ZERO(Cfg);
-                    Cfg.enmDir                        = PDMAUDIODIR_OUT;
-                    Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
-                    Cfg.Device.cMsSchedulingHint      = 10;
-                    Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
-                    PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100);
-                    RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)");
-
-                    pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
+                /* 44.1kHz */
+                RT_ZERO(Cfg);
+                Cfg.enmDir                        = PDMAUDIODIR_OUT;
+                Cfg.enmPath                       = PDMAUDIOPATH_OUT_FRONT;
+                Cfg.Device.cMsSchedulingHint      = 10;
+                Cfg.Backend.cFramesPreBuffering   = UINT32_MAX;
+                PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100);
+                RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)");
+
+                pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */
 # endif
-                }
-
-                LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", iLun, pDrv->pConnector));
-                return VINF_SUCCESS;
             }
-            RTMemFree(pDrv);
-            rc = VERR_PDM_MISSING_INTERFACE_BELOW;
+
+            LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector));
+            return VINF_SUCCESS;
         }
-        else
-            rc = VERR_NO_MEMORY;
+        RTMemFree(pDrv);
+        rc = VERR_PDM_MISSING_INTERFACE_BELOW;
     }
     else if (rc == VERR_PDM_NO_ATTACHED_DRIVER)
-        LogFunc(("No attached driver for LUN #%u\n", iLun));
+        LogFunc(("No attached driver for LUN #%u\n", uLUN));
     else
-        LogFunc(("Attached driver for LUN #%u failed: %Rrc\n", iLun, rc));
-
-    RTStrFree(pszDesc);
-    LogFunc(("LUN#%u: rc=%Rrc\n", iLun, rc));
+        LogFunc(("Attached driver for LUN #%u failed: %Rrc\n", uLUN, rc));
+    RTMemFree(pDrv);
+
+    LogFunc(("LUN#%u: rc=%Rrc\n", uLUN, rc));
     return rc;
 }
@@ -4322,5 +4316,4 @@
             DEVAC97_UNLOCK(pDevIns, pThis);
 
-            RTStrFree(pDrv->pszDesc);
             RTMemFree(pDrv);
             return;
@@ -4347,5 +4340,4 @@
     {
         RTListNodeRemove(&pDrv->Node);
-        RTMemFree(pDrv->pszDesc);
         RTMemFree(pDrv);
     }
Index: /trunk/src/VBox/Devices/Audio/DevSB16.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevSB16.cpp	(revision 91686)
+++ /trunk/src/VBox/Devices/Audio/DevSB16.cpp	(revision 91687)
@@ -2630,5 +2630,5 @@
      */
     PSB16DRIVER pDrv = (PSB16DRIVER)RTMemAllocZ(sizeof(SB16DRIVER));
-    AssertReturn(pDrv, VERR_NO_MEMORY);
+    AssertPtrReturn(pDrv, VERR_NO_MEMORY);
     RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (SB16) for LUN #%u", uLUN);
 
