From 2108273154d0a90da4b754dfb9afb92168f40d94 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Fri, 30 Jan 2015 13:08:19 -0600 Subject: [PATCH] SOLARIS: Avoid uninitialized caller_context_t 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 , 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. Reviewed-on: http://gerrit.openafs.org/11704 Reviewed-by: Perry Ruiter Tested-by: BuildBot Reviewed-by: Daria Brashear (cherry picked from commit b9647ac1062509d6a3997ca575ab1542d04677a2) Change-Id: I5d247cfa6ada3773d20e3938957dcc31c8664bb2 Reviewed-on: http://gerrit.openafs.org/11712 Reviewed-by: Perry Ruiter Reviewed-by: Andrew Deason Tested-by: BuildBot Reviewed-by: Benjamin Kaduk Reviewed-by: Jeffrey Altman Reviewed-by: Stephan Wiesand --- src/afs/SOLARIS/osi_file.c | 6 +----- src/afs/VNOPS/afs_vnop_read.c | 10 +++------- src/afs/VNOPS/afs_vnop_write.c | 10 +++------- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/afs/SOLARIS/osi_file.c b/src/afs/SOLARIS/osi_file.c index e0c00579a..a0d38a821 100644 --- a/src/afs/SOLARIS/osi_file.c +++ b/src/afs/SOLARIS/osi_file.c @@ -327,11 +327,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 diff --git a/src/afs/VNOPS/afs_vnop_read.c b/src/afs/VNOPS/afs_vnop_read.c index b0f7f0f2e..3bad235a1 100644 --- a/src/afs/VNOPS/afs_vnop_read.c +++ b/src/afs/VNOPS/afs_vnop_read.c @@ -862,13 +862,9 @@ afs_UFSRead(struct vcache *avc, struct uio *auio, #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, &tuio, 0, afs_osi_credp, &ct); - VOP_RWUNLOCK(tfile->vnode, 0, &ct); - } + VOP_RWLOCK(tfile->vnode, 0, NULL); + code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp, NULL); + VOP_RWUNLOCK(tfile->vnode, 0, NULL); #else VOP_RWLOCK(tfile->vnode, 0); code = VOP_READ(tfile->vnode, &tuio, 0, afs_osi_credp); diff --git a/src/afs/VNOPS/afs_vnop_write.c b/src/afs/VNOPS/afs_vnop_write.c index 07b38ff45..068dbac5d 100644 --- a/src/afs/VNOPS/afs_vnop_write.c +++ b/src/afs/VNOPS/afs_vnop_write.c @@ -470,13 +470,9 @@ afs_UFSWrite(struct vcache *avc, struct uio *auio, int aio, #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, &tuio, 0, afs_osi_credp, &ct); - VOP_RWUNLOCK(tfile->vnode, 1, &ct); - } + VOP_RWLOCK(tfile->vnode, 1, NULL); + code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp, NULL); + VOP_RWUNLOCK(tfile->vnode, 1, NULL); #else VOP_RWLOCK(tfile->vnode, 1); code = VOP_WRITE(tfile->vnode, &tuio, 0, afs_osi_credp); -- 2.39.5