Do not leak information on partial success in RXAFS_InlineBulkStatus
[openafs.git] / src / viced / afsfileprocs.c
index b15372d..ec9eea6 100644 (file)
@@ -2731,6 +2731,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     struct host *thost;
     struct client *t_client = NULL;    /* tmp ptr to client data */
     AFSFetchStatus *tstatus;
+    int VolSync_set = 0;
 #if FS_STATS_DETAILED
     struct fs_stats_opTimingData *opP; /* Ptr to this op's timing struct */
     struct timeval opStartTime, opStopTime;    /* Start/stop times for RPC op */
@@ -2773,6 +2774,11 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
     }
     CallBacks->AFSCBs_len = nfiles;
 
+    /* Zero out return values to avoid leaking information on partial succes */
+    memset(OutStats->AFSBulkStats_val, 0, nfiles * sizeof(struct AFSFetchStatus));
+    memset(CallBacks->AFSCBs_val, 0, nfiles * sizeof(struct AFSCallBack));
+    memset(Sync, 0, sizeof(*Sync));
+
     if ((errorCode = CallPreamble(acall, ACTIVECALL, &tcon, &thost))) {
        goto Bad_InlineBulkStatus;
     }
@@ -2799,8 +2805,10 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
        }
 
        /* set volume synchronization information, but only once per call */
-       if (i == 0)
+       if (!VolSync_set) {
            SetVolumeSync(Sync, volptr);
+           VolSync_set = 1;
+       }
 
        /* Are we allowed to fetch Fid's status? */
        if (targetptr->disk.type != vDirectory) {