viced: SRXAFS_InlineBulkStatus set InterfaceVersion on error 67/13067/2
authorJeffrey Altman <jaltman@auristor.com>
Fri, 11 May 2018 19:44:24 +0000 (15:44 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Tue, 15 May 2018 23:18:05 +0000 (19:18 -0400)
AFSFetchStatus.InterfaceVersion is required to be "1" for any
of the fields in the structure to be considered valid.  Therefore,
InterfaceVersion must be set to one when returning an 'errorCode'
value.

When RXAFS_InlineBulkStatus was introduced by OpenAFS in
362d26c733b086d26f013bd229af979a112098f5 not only wasn't
InterfaceVersion set but neither was the memory allocated
to OutStats initialized.  As a result the InterfaceVersion field
value could be not only zero but random.  The OutStats memory
was initialized to zeros beginning with
726e1e13ff93e2cc1ac21964dc8d906869e64406.

Change-Id: I5ca1b08cb32d01843a1c6dee87d8ba1d560396c8
Reviewed-on: https://gerrit.openafs.org/13067
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/viced/afsfileprocs.c

index ea11640..6c7cad1 100644 (file)
@@ -2753,6 +2753,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                              &rights, &anyrights))) {
            tstatus = &OutStats->AFSBulkStats_val[i];
 
+           tstatus->InterfaceVersion = 1;
            if (thost->z.hostFlags & HERRORTRANS) {
                tstatus->errorCode = sys_error_to_et(errorCode);
            } else {
@@ -2781,6 +2782,7 @@ SRXAFS_InlineBulkStatus(struct rx_call * acall, struct AFSCBFids * Fids,
                                        CHK_FETCHSTATUS, 0))) {
                tstatus = &OutStats->AFSBulkStats_val[i];
 
+               tstatus->InterfaceVersion = 1;
                if (thost->z.hostFlags & HERRORTRANS) {
                    tstatus->errorCode = sys_error_to_et(errorCode);
                } else {