]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: do not leak space allocation
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 20 Jul 2011 22:31:17 +0000 (18:31 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Tue, 2 Aug 2011 15:01:32 +0000 (08:01 -0700)
smb_ReceiveNTTranCreate leaks a cm_GetSpace allocation on
error.  Don't do that.

Reviewed-on: http://gerrit.openafs.org/5062
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from c61f5208f553ed1674d1ae51d6e0f16fcdbba47b)

Change-Id: Id706189bd0aafb0b55c58f28fff80ba841a8ef48
Reviewed-on: http://gerrit.openafs.org/5135
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/afsd/smb3.c

index 777386ba3f6bbd4ed16d28576a312355c9fc2cd1..5cfb42603144bf11deaa581c38b726b1f006ae3a 100644 (file)
@@ -8403,6 +8403,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
            createDisp == FILE_OVERWRITE_IF))
     {
         osi_Log0(smb_logp, "NTTranCreate rejecting invalid readDirFlag and createDisp combination");
+        cm_FreeSpace(spacep);
         free(realPathp);
         return CM_ERROR_INVAL;
     }
@@ -8424,6 +8425,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
 #else
         osi_Log0(smb_logp, "NTTranCreate rejecting invalid name.");
 #endif
+        cm_FreeSpace(spacep);
         free(realPathp);
         return CM_ERROR_BADNTFILENAME;
     }
@@ -8431,6 +8433,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
     userp = smb_GetUserFromVCP(vcp, inp);
     if (!userp) {
        osi_Log1(smb_logp, "NTTranCreate invalid user [%d]", ((smb_t *) inp)->uid);
+        cm_FreeSpace(spacep);
        free(realPathp);
        return CM_ERROR_INVAL;
     }
@@ -8447,6 +8450,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
              */
             osi_Log0(smb_logp, "NTTranCreate received IPC TID");
 #ifndef DFS_SUPPORT
+            cm_FreeSpace(spacep);
             free(realPathp);
             cm_ReleaseUser(userp);
             return CM_ERROR_NOSUCHPATH;
@@ -8457,12 +8461,14 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
         if (!baseFidp) {
             osi_Log2(smb_logp, "NTTranCreate Unknown SMB Fid vcp 0x%p fid %d",
                       vcp, baseFid);
+            cm_FreeSpace(spacep);
             free(realPathp);
             cm_ReleaseUser(userp);
             return CM_ERROR_BADFD;
         }
 
         if (baseFidp->scp && (baseFidp->scp->flags & CM_SCACHEFLAG_DELETED)) {
+            cm_FreeSpace(spacep);
             free(realPathp);
             cm_ReleaseUser(userp);
            smb_CloseFID(vcp, baseFidp, NULL, 0);
@@ -8510,6 +8516,7 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out
             int pnc = cm_VolStatus_Notify_DFS_Mapping(dscp, tidPathp, spacep->wdata);
             cm_ReleaseSCache(dscp);
             cm_ReleaseUser(userp);
+            cm_FreeSpace(spacep);
             free(realPathp);
             if (baseFidp)
                 smb_ReleaseFID(baseFidp);