afs: Properly type afs_osi_suser cred arg 85/14085/3
authorAndrew Deason <adeason@sinenomine.net>
Tue, 14 Jan 2020 16:51:42 +0000 (10:51 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 6 Mar 2020 16:12:51 +0000 (11:12 -0500)
commit4ce922d339777faf647f7129f5ae3f173a7870b1
tree84962d6bef598832f019999dfcb44aceb58d70dd
parent8d90a9d27b0ef28ddcdd3eb041c8a9d019b84b50
afs: Properly type afs_osi_suser cred arg

Currently, afs_osi_suser is declared with a void* argument, even
though its only argument is always effectively a afs_ucred_t*. This
allows us to call afs_osi_suser with any pointer type without the
compiler complaining. Currently, some callers call afs_osi_suser with
an incorrectly-typed afs_ucred_t** instead, like so:

    func(afs_ucred_t **credpp)
    {
        afs_ucred_t **acred = *acredpp; /* incorrect assignment */
        if (afs_osi_suser(acred)) {
            /* ... */
        }
    }

The actual code in the tree hides this to some degree behind various
function calls and layers of indirection (e.g. afs_suser()), but this
is effectively what we do. This causes compiler warnings because we
are doing incorrect pointer assignments, but the end result works
because afs_osi_suser actually uses an afs_ucred_t*.

The type confusion makes it very easy to accidentally give the wrong
type to afs_osi_suser. This only really matters on SOLARIS, since that
is the only platform that actually uses its argument to
afs_osi_suser().

To fix all of this, just declare afs_osi_suser as taking an
afs_ucred_t*, and fix all of the relevant functions to handle the
right type.

Change-Id: I1366aedf0f3d7689735a9424c5272233931e3bf2
Reviewed-on: https://gerrit.openafs.org/14085
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
12 files changed:
src/afs/AIX/osi_misc.c
src/afs/DARWIN/osi_misc.c
src/afs/DARWIN/osi_prototypes.h
src/afs/HPUX/osi_misc.c
src/afs/NBSD/osi_misc.c
src/afs/OBSD/osi_misc.c
src/afs/UKERNEL/afs_usrops.c
src/afs/UKERNEL/osi_machdep.h
src/afs/afs_osi.c
src/afs/afs_osi_pag.c
src/afs/afs_pioctl.c
src/afs/afs_prototypes.h