]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
SOLARIS: Avoid uninitialized caller_context_t
authorAndrew Deason <adeason@sinenomine.net>
Fri, 30 Jan 2015 19:08:19 +0000 (13:08 -0600)
committerDaria Brashear <shadow@your-file-system.com>
Sat, 31 Jan 2015 13:29:26 +0000 (08:29 -0500)
Currently we pass a caller_context_t* to some of Solaris' VFS
functions (VOP_SETATTR, VOP_READ, VOP_WRITE, VOP_RWLOCK,
VOP_RWUNLOCK), but the pointer we pass is to uninitialized memory.

This code was added in commit 51d76681, and this particular argument
is mentioned in
<https://lists.openafs.org/pipermail/openafs-info/2004-March/012657.html>,
where the author doesn't really know what the argument is for.

Over 10 years later, it's still not obvious what this argument does,
since I cannot find any documentation for it. However, browsing
publicly-available Illumos/OpenSolaris source suggests this is used
for things like non-blocking operations for network filesystems, and
is only interpreted by certain filesystems in certain codepaths.

In any case, it's clear that we're not supposed to be passing in an
uninitialized structure, since the struct has actual members that are
sometimes interpreted by lower levels. Other callers in
Illumos/OpenSolaris source seem to just pass NULL here if they don't
need any special behavior. So, just pass NULL.

I am not aware of any issues caused by passing in this uninitialized
struct, and browsing Illumos source and discussing the issue with
Oracle engineers suggest there would currently not be any issues with
the cache filesystems we would be using.

However, it's always possible that issues could arise from this in the
future, or there are issues we don't know about. Any such issues would
almost certainly appear to be non-deterministic and be a nightmare to
track down. So just pass NULL, to avoid the potential issues.

Change-Id: I41babe520530ba886d1877de99eb1644c1b9f699
Reviewed-on: http://gerrit.openafs.org/11704
Reviewed-by: Perry Ruiter <pruiter@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
src/afs/SOLARIS/osi_file.c
src/afs/VNOPS/afs_vnop_read.c
src/afs/VNOPS/afs_vnop_write.c

index a1284aa4de53ac8b53ade0181749123a5acdc781..4a4f79e285d107bb91bb7248c55703cd46da91a0 100644 (file)
@@ -313,11 +313,7 @@ osi_UFSTruncate(struct osi_file *afile, afs_int32 asize)
      */
     AFS_GUNLOCK();
 #ifdef AFS_SUN510_ENV
-    {
-       caller_context_t ct;
-
-       code = VOP_SETATTR(afile->vnode, &tvattr, 0, afs_osi_credp, &ct);
-    }
+    code = VOP_SETATTR(afile->vnode, &tvattr, 0, afs_osi_credp, NULL);
 #else
     code = VOP_SETATTR(afile->vnode, &tvattr, 0, afs_osi_credp);
 #endif
index 5d3d1000c7d6665374e6d1241a0ed01e81b79a26..1b1c682f5079297a1a9a7db816dabd5bab069ae6 100644 (file)
@@ -528,12 +528,9 @@ afs_UFSReadUIO(afs_dcache_id_t *cacheId, struct uio *tuiop)
 #elif defined(AFS_SUN5_ENV)
     AFS_GUNLOCK();
 #ifdef AFS_SUN510_ENV
-    {
-       caller_context_t ct;
-       VOP_RWLOCK(tfile->vnode, 0, &ct);
-       code = VOP_READ(tfile->vnode, tuiop, 0, afs_osi_credp, &ct);
-       VOP_RWUNLOCK(tfile->vnode, 0, &ct);
-    }
+    VOP_RWLOCK(tfile->vnode, 0, NULL);
+    code = VOP_READ(tfile->vnode, tuiop, 0, afs_osi_credp, NULL);
+    VOP_RWUNLOCK(tfile->vnode, 0, NULL);
 #else
     VOP_RWLOCK(tfile->vnode, 0);
     code = VOP_READ(tfile->vnode, tuiop, 0, afs_osi_credp);
index 086fc9d2173697a961b8451ebfb3340cd51bbf9a..c3ee0053fd69c07d176a024a404932a3d50a01cb 100644 (file)
@@ -120,13 +120,9 @@ afs_UFSWriteUIO(struct vcache *avc, afs_dcache_id_t *inode, struct uio *tuiop)
 #elif defined(AFS_SUN5_ENV)
     AFS_GUNLOCK();
 # ifdef AFS_SUN510_ENV
-    {
-       caller_context_t ct;
-
-       VOP_RWLOCK(tfile->vnode, 1, &ct);
-       code = VOP_WRITE(tfile->vnode, tuiop, 0, afs_osi_credp, &ct);
-       VOP_RWUNLOCK(tfile->vnode, 1, &ct);
-    }
+    VOP_RWLOCK(tfile->vnode, 1, NULL);
+    code = VOP_WRITE(tfile->vnode, tuiop, 0, afs_osi_credp, NULL);
+    VOP_RWUNLOCK(tfile->vnode, 1, NULL);
 # else
     VOP_RWLOCK(tfile->vnode, 1);
     code = VOP_WRITE(tfile->vnode, tuiop, 0, afs_osi_credp);