]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
memory-leak-fixes-20040417
authorNickolai Zeldovich <kolya@mit.edu>
Sun, 18 Apr 2004 07:13:47 +0000 (07:13 +0000)
committerNickolai Zeldovich <kolya@mit.edu>
Sun, 18 Apr 2004 07:13:47 +0000 (07:13 +0000)
Fix some memory leaks.

src/afs/afs_pioctl.c
src/libacl/aclprocs.c
src/ptserver/db_verify.c
src/ptserver/ptutils.c
src/ptserver/readgroup.c
src/ptserver/readpwd.c
src/rx/rx.c
src/rxkad/rxkad_client.c
src/vol/volume.c

index 8586d014ba7c6de3a59a457f20f266ac9f6aa30f..f9555d02ab0779007bd0af84ee64d74b4a6316b8 100644 (file)
@@ -1573,32 +1573,43 @@ DECL_PIOCTL(PSetVolumeStatus)
     XSTATS_DECLS;
 
     AFS_STATCNT(PSetVolumeStatus);
-    if (!avc)
-       return EINVAL;
+    if (!avc) {
+       code = EINVAL;
+       goto out;
+    }
 
     tvp = afs_GetVolume(&avc->fid, areq, READ_LOCK);
     if (tvp) {
        if (tvp->states & (VRO | VBackup)) {
            afs_PutVolume(tvp, READ_LOCK);
-           return EROFS;
+           code = EROFS;
+           goto out;
        }
        afs_PutVolume(tvp, READ_LOCK);
-    } else
-       return ENODEV;
+    } else {
+       code = ENODEV;
+       goto out;
+    }
     /* Copy the junk out, using cp as a roving pointer. */
     cp = ain;
     memcpy((char *)&volstat, cp, sizeof(AFSFetchVolumeStatus));
     cp += sizeof(AFSFetchVolumeStatus);
-    if (strlen(cp) >= sizeof(volName))
-       return E2BIG;
+    if (strlen(cp) >= sizeof(volName)) {
+       code = E2BIG;
+       goto out;
+    }
     strcpy(volName, cp);
     cp += strlen(volName) + 1;
-    if (strlen(cp) >= sizeof(offLineMsg))
-       return E2BIG;
+    if (strlen(cp) >= sizeof(offLineMsg)) {
+       code = E2BIG;
+       goto out;
+    }
     strcpy(offLineMsg, cp);
     cp += strlen(offLineMsg) + 1;
-    if (strlen(cp) >= sizeof(motd))
-       return E2BIG;
+    if (strlen(cp) >= sizeof(motd)) {
+       code = E2BIG;
+       goto out;
+    }
     strcpy(motd, cp);
     storeStat.Mask = 0;
     if (volstat.MinQuota != -1) {
index febd634a8648e0d01e9562531704fda153edcf3a..cf97e73a120f4fbf8cb4d95c8cb654f996fed0a4 100644 (file)
@@ -276,8 +276,10 @@ acl_Internalize(elist, acl)
     nextc++;                   /* now at the beginning of the entry list */
     for (i = 0; i < (*acl)->positive; i++) {
        int k;
-       if (sscanf(nextc, "%s\t%d\n", lnames.namelist_val[i], &k) != 2)
+       if (sscanf(nextc, "%s\t%d\n", lnames.namelist_val[i], &k) != 2) {
+           free(lnames.namelist_val);
            return (-1);
+       }
        (*acl)->entries[i].rights = k;
        nextc = strchr(nextc, '\n');
        nextc++;                /* 1 + index can cast ptr to integer */
@@ -287,8 +289,10 @@ acl_Internalize(elist, acl)
         i--, j++) {
        if (sscanf
            (nextc, "%s\t%d\n", lnames.namelist_val[j],
-            &((*acl)->entries[j].rights)) != 2)
+            &((*acl)->entries[j].rights)) != 2) {
+           free(lnames.namelist_val);
            return (-1);
+       }
        nextc = strchr(nextc, '\n');
        nextc++;
     }
index 6fd341e783af7b78de3c55244dff8a024f97f638..205b2fe6cae2fb90c2dfd36807ff6547fe358333 100644 (file)
@@ -1447,6 +1447,7 @@ CheckPrDatabase(misc)
               misc->nforeigns, misc->ngroups);
     }
 
+    free(map);
     return code;
 }
 
index 6b4de58c7fa8ed055185c5ebc071ecd41758a320..ce71577688c44f4a7e9781c4e1190c833f435cdd 100644 (file)
@@ -457,6 +457,7 @@ CreateEntry(at, aname, aid, idflag, flag, oid, creator)
        strcpy(cellGroup, AUTHUSER_GROUP);
        strcat(cellGroup, atsign);
        pos = FindByName(at, cellGroup, &centry);
+       free(cellGroup);
        if (!pos)
            return PRBADNAM;
        code = pr_Read(at, 0, pos, &centry, sizeof(centry));
index 60ac69e206734df41c7a106514a50c0c22ef61e2..59965ba20fa74693fe44bbdb745f942a9eac866e 100644 (file)
@@ -100,6 +100,7 @@ main(argc, argv)
        }
     }
     code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
+    free(cellname);
     if (code) {
        fprintf(stderr, "pr_Initialize failed .. exiting.\n");
        fprintf(stderr, "%s (%d).\n", pr_ErrorMsg(code), code);
index 08cd5f5f0fe6ada3ce23e71fd8f0d0b79bd069df..764a85126925631ed917f9117287116325af3edc 100644 (file)
@@ -77,6 +77,7 @@ main(argc, argv)
        }
     }
     code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
+    free(cellname);
     if (code) {
        fprintf(stderr, "pr_Initialize failed, code %d.\n", code);
        exit(1);
index 32b57713f3c66ea194ff943b6c07719d43517a0d..bfb4ddf5991ad161573ca5d44205ab63a31cc2ee 100644 (file)
@@ -1699,6 +1699,7 @@ rx_GetCall(int tno, struct rx_service *cur_service, osi_socket * socketp)
            if (afs_termState == AFSOP_STOP_RXCALLBACK) {
                AFS_RXGUNLOCK();
                USERPRI;
+               rxi_Free(sq, sizeof(struct rx_serverQueueEntry));
                return (struct rx_call *)0;
            }
 #endif
index 447b007ef2369caade20f2cf0d301ac98504cad0..61d0d06bc172c8ba29755f20d961e116e5607edb 100644 (file)
@@ -189,13 +189,17 @@ rxkad_NewClientSecurityObject(rxkad_level level,
     tcp->type |= rxkad_client;
     tcp->level = level;
     code = fc_keysched(sessionkey, tcp->keysched);
-    if (code)
+    if (code) {
+       rxi_Free(tsc, size);
        return 0;               /* bad key */
+    }
     memcpy((void *)tcp->ivec, (void *)sessionkey, sizeof(tcp->ivec));
     tcp->kvno = kvno;          /* key version number */
     tcp->ticketLen = ticketLen;        /* length of ticket */
-    if (tcp->ticketLen > MAXKTCTICKETLEN)
+    if (tcp->ticketLen > MAXKTCTICKETLEN) {
+       rxi_Free(tsc, size);
        return 0;               /* bad key */
+    }
     memcpy(tcp->ticket, ticket, ticketLen);
 
     LOCK_RXKAD_STATS rxkad_stats_clientObjects++;
index 87138fca290ead3df2af749d87ed2181841948c9..c12bc7e2d9aeb4fe2bf74f6513e477fd5a1b29eb 100644 (file)
@@ -788,6 +788,7 @@ attach2(Error * ec, char *path, register struct VolumeHeader * header,
            vp->specialStatus = 0;
        Log("VAttachVolume: volume salvage flag is ON for %s; volume needs salvage\n", path);
        *ec = VSALVAGE;
+       FreeVolume(vp);
        return NULL;
     }
     if (programType == fileServer) {