OPENAFS-SA-2016-002 VldbListByAttributes information leak
[openafs.git] / src / libadmin / vos / vosutils.c
index 3fcab99..1b99d2b 100644 (file)
@@ -277,22 +277,25 @@ VLDB_ListAttributes(afs_cell_handle_p cellHandle,
                if (*entriesp > arrayEntries.bulkentries_len)
                    *entriesp = arrayEntries.bulkentries_len;
 
-               blkentriesp->nbulkentries_val =
-                   malloc(*entriesp * sizeof(*blkentriesp));
-               if (blkentriesp->nbulkentries_val != NULL) {
-                   for (i = 0; i < *entriesp; i++) {
-                       OldVLDB_to_NewVLDB((struct vldbentry *)&arrayEntries.
-                                          bulkentries_val[i],
-                                          (struct nvldbentry *)&blkentriesp->
-                                          nbulkentries_val[i], &tst);
+               if (*entriesp > 0) {
+                   blkentriesp->nbulkentries_val =
+                       calloc(*entriesp, sizeof(struct nvldbentry));
+                   if (blkentriesp->nbulkentries_val != NULL) {
+                       for (i = 0; i < *entriesp; i++) {
+                           OldVLDB_to_NewVLDB((struct vldbentry *)&arrayEntries.
+                                              bulkentries_val[i],
+                                              (struct nvldbentry *)&blkentriesp->
+                                              nbulkentries_val[i], &tst);
+                       }
+                   } else {
+                       tst = ADMNOMEM;
                    }
                } else {
-                   tst = ADMNOMEM;
-               }
-               if (arrayEntries.bulkentries_val) {
-                   free(arrayEntries.bulkentries_val);
+                   blkentriesp->nbulkentries_val = NULL;
                }
 
+               xdr_free((xdrproc_t)xdr_bulkentries, &arrayEntries);
+
                rc = 1;
            }
        }
@@ -425,8 +428,8 @@ GetVolumeInfo(afs_cell_handle_p cellHandle, afs_uint32 volid,
     if (volid == rentry->volumeId[ROVOL]) {
        *voltype = ROVOL;
        for (i = 0; i < rentry->nServers; i++) {
-           if ((index == -1) && (rentry->serverFlags[i] & ITSROVOL)
-               && !(rentry->serverFlags[i] & RO_DONTUSE))
+           if ((index == -1) && (rentry->serverFlags[i] & VLSF_ROVOL)
+               && !(rentry->serverFlags[i] & VLSF_DONTUSE))
                index = i;
        }
        if (index == -1) {