Fix some memory leaks.
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) {
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 */
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++;
}
misc->nforeigns, misc->ngroups);
}
+ free(map);
return code;
}
strcpy(cellGroup, AUTHUSER_GROUP);
strcat(cellGroup, atsign);
pos = FindByName(at, cellGroup, ¢ry);
+ free(cellGroup);
if (!pos)
return PRBADNAM;
code = pr_Read(at, 0, pos, ¢ry, sizeof(centry));
}
}
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);
}
}
code = pr_Initialize(2, AFSDIR_CLIENT_ETC_DIRPATH, cellname);
+ free(cellname);
if (code) {
fprintf(stderr, "pr_Initialize failed, code %d.\n", code);
exit(1);
if (afs_termState == AFSOP_STOP_RXCALLBACK) {
AFS_RXGUNLOCK();
USERPRI;
+ rxi_Free(sq, sizeof(struct rx_serverQueueEntry));
return (struct rx_call *)0;
}
#endif
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++;
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) {