diff options
Diffstat (limited to '0021-afs-fix-ops-variable-may-be-used-uninitialized.patch')
-rw-r--r-- | 0021-afs-fix-ops-variable-may-be-used-uninitialized.patch | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/0021-afs-fix-ops-variable-may-be-used-uninitialized.patch b/0021-afs-fix-ops-variable-may-be-used-uninitialized.patch new file mode 100644 index 000000000000..8aaac72c3e3c --- /dev/null +++ b/0021-afs-fix-ops-variable-may-be-used-uninitialized.patch @@ -0,0 +1,85 @@ +From 90b8dcff36e9b03ec01550ad1a070a0ab7db8c46 Mon Sep 17 00:00:00 2001 +From: Cheyenne Wills <cwills@sinenomine.net> +Date: Fri, 9 Feb 2024 09:01:33 -0700 +Subject: [PATCH 21/32] afs: fix 'ops' variable may be used uninitialized + +When the function rxfs_storeInit() has the static attribute, gcc flags +the variable 'ops' as possibly uninitialized. + +In function 'afs_CacheStoreDCaches', + inlined from 'afs_CacheStoreVCache' at + .../src/afs/afs_fetchstore.c:630:14: + .../afs/afs_fetchstore.c:535:17: error: 'ops' may be used + uninitialized [-Werror=maybe-uninitialized] + 535 | code = (*ops->destroy)(&rock, code); + | ~^~~~~~~~~~~~~~ + ...src/afs/afs_fetchstore.c: In function 'afs_CacheStoreVCache': + ...src/afs/afs_fetchstore.c:567:22: note: 'ops' was declared here + 567 | struct storeOps *ops; + | ^~~ + cc1: all warnings being treated as errors + +This is a false positive report by the gcc compiler. + +The function rxfs_storeInit() returns a 0 only when it has successfully +assigned a value to the ops variable, and afs_CacheStoreDcaches() is +only called if the return value from rxfs_storeInit() is 0. + +The ops variable is only used within a block that is within a for loop, +which could leave a stray value if the variable isn't initialized within +that loop. + +Assigning a NULL to ops is sufficient to avoid the compiler error, and +relocating the declaration of the ops variable into the block where it +is actually used ensures that it's always initialized before its use +within the loop. + +Clean up whitespace in the statement that follows the new location for +the ops variable. + +Note, this commit is being added before a commit that adds the static +attribute to the rxfs_storeInit() function which also "fixes" the +compiler error (see: afs: Add static attribute to internal functions). + +Reviewed-on: https://gerrit.openafs.org/15630 +Reviewed-by: Andrew Deason <adeason@sinenomine.net> +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Mark Vitale <mvitale@sinenomine.net> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +(cherry picked from commit 36e4c02ff27b9d66755b9544778896b9b1e5c391) + +Change-Id: I9d8a07e576c6bf889f8f182c6fc0d34dc997c004 +Reviewed-on: https://gerrit.openafs.org/15699 +Tested-by: BuildBot <buildbot@rampaginggeek.com> +Reviewed-by: Andrew Deason <adeason@sinenomine.net> +Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> +Reviewed-by: Benjamin Kaduk <kaduk@mit.edu> +--- + src/afs/afs_fetchstore.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/afs/afs_fetchstore.c b/src/afs/afs_fetchstore.c +index 7b35b8f7f..63b370dae 100644 +--- a/src/afs/afs_fetchstore.c ++++ b/src/afs/afs_fetchstore.c +@@ -564,7 +564,6 @@ afs_CacheStoreVCache(struct dcache **dcList, struct vcache *avc, + afs_hyper_t *anewDV, afs_size_t *amaxStoredLength) + { + afs_int32 code = 0; +- struct storeOps *ops; + void * rock = NULL; + unsigned int i, j; + +@@ -619,7 +618,8 @@ afs_CacheStoreVCache(struct dcache **dcList, struct vcache *avc, + ICL_HANDLE_OFFSET(length)); + + do { +- tc = afs_Conn(&avc->f.fid, areq, 0, &rxconn); ++ struct storeOps *ops = NULL; ++ tc = afs_Conn(&avc->f.fid, areq, 0, &rxconn); + + #ifdef AFS_64BIT_CLIENT + restart: +-- +2.45.1 + |