DragonFlyBSD Kernel Audit
DF-1620 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/raid/mrsas/mrsas_cam.c b/sys/dev/raid/mrsas/mrsas_cam.c
--- a/sys/dev/raid/mrsas/mrsas_cam.c
+++ b/sys/dev/raid/mrsas/mrsas_cam.c
@@ -481,6 +481,7 @@
     req_desc = mrsas_get_request_desc(sc, (cmd->index)-1);
     if (!req_desc) {
         device_printf(sc->mrsas_dev, "Cannot get request_descriptor.\n");
+        mrsas_release_mpt_cmd(cmd);
         return (FAIL);
     }
     memset(req_desc, 0, sizeof(MRSAS_REQUEST_DESCRIPTOR_UNION));
@@ -495,6 +496,7 @@
     if (mrsas_ldio_inq(sim, ccb)) {
         if (mrsas_build_ldio(sc, cmd, ccb)){
             device_printf(sc->mrsas_dev, "Build LDIO failed.\n");
+            mrsas_release_mpt_cmd(cmd);
 	    lockmgr(&sc->raidmap_lock, LK_RELEASE);
             return(1);
         }    
@@ -502,6 +504,7 @@
     else { 
         if (mrsas_build_dcdb(sc, cmd, ccb, sim)) {
             device_printf(sc->mrsas_dev, "Build DCDB failed.\n");
+            mrsas_release_mpt_cmd(cmd);
 	    lockmgr(&sc->raidmap_lock, LK_RELEASE);
             return(1);
         }