From: Benjamin Kaduk Date: Wed, 5 Feb 2014 23:32:16 +0000 (-0500) Subject: afs_fetchstore: re-avoid uninitialized variable X-Git-Tag: openafs-stable-1_8_0pre1~783 X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=b7326e487f6387033282cc5d1128b00a0456673a afs_fetchstore: re-avoid uninitialized variable As noted in the gerrit comments for change 10742, commit baf6af8a8f2207ce39b746d59ca4bc661c002883 does not handle the case where the second rx_Read() call fails, and the 'length' variable can still be used uninitialized. Instead of using an err label and jumping to it on the case of errors, initialize length to zero and take care to neither set nor access *alength if an error has occurred. This is more consistent with the style of the surrounding code while still avoiding the use of an uninitialized variable. Change-Id: I6abfa4a5f051368ca12ada1494fc7687f378d319 Reviewed-on: http://gerrit.openafs.org/10806 Tested-by: BuildBot Reviewed-by: Jeffrey Altman --- diff --git a/src/afs/afs_fetchstore.c b/src/afs/afs_fetchstore.c index a9f47a0..99f9c51 100644 --- a/src/afs/afs_fetchstore.c +++ b/src/afs/afs_fetchstore.c @@ -918,7 +918,7 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, #ifdef AFS_64BIT_CLIENT afs_uint32 length_hi = 0; #endif - afs_uint32 length, bytes; + afs_uint32 length = 0, bytes; v = (struct rxfs_fetchVariables *) osi_AllocSmallSpace(sizeof(struct rxfs_fetchVariables)); @@ -974,9 +974,7 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, afs_serverSetNo64Bit(tc); v->hasNo64bit = 1; } - if (code) { - goto err; - } else { + if (!code) { RX_AFS_GUNLOCK(); bytes = rx_Read(v->call, (char *)&length, sizeof(afs_int32)); RX_AFS_GLOCK(); @@ -987,6 +985,7 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, code = rx_Error(v->call); code1 = rx_EndCall(v->call, code); v->call = NULL; + length = 0; RX_AFS_GLOCK(); } } @@ -995,7 +994,8 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, ICL_TYPE_POINTER, avc, ICL_TYPE_INT32, code, ICL_TYPE_OFFSET, ICL_HANDLE_OFFSET(length64)); - *alength = length; + if (!code) + *alength = length; #else /* AFS_64BIT_CLIENT */ RX_AFS_GUNLOCK(); code = StartRXAFS_FetchData(v->call, (struct AFSFid *)&avc->f.fid.Fid, @@ -1034,7 +1034,6 @@ rxfs_fetchInit(struct afs_conn *tc, struct rx_connection *rxconn, code = EIO; } -err: if (!code && code1) code = code1;