• Chuck Lever's avatar
    SUNRPC: Check rq_auth_stat when preparing to wrap a response · 99d074d6
    Chuck Lever authored
    Commit 5b304bc5 ("[PATCH] knfsd: svcrpc: gss: fix failure on
    SVC_DENIED in integrity case") added a check to prevent wrapping an
    RPC response if reply_stat == MSG_DENIED, assuming that the only way
    to get to svcauth_gss_release() with that reply_stat value was if
    the reject_stat was AUTH_ERROR (reject_stat == MISMATCH is handled
    earlier in svc_process_common()).
    
    The code there is somewhat confusing. For one thing, rpc_success is
    an accept_stat value, not a reply_stat value. The correct reply_stat
    value to look for is RPC_MSG_DENIED. It happens to be the same value
    as rpc_success, so it all works out, but it's not terribly readable.
    
    Since commit 438623a0 ("SUNRPC: Add svc_rqst::rq_auth_stat"),
    the actual auth_stat value is stored in the svc_rqst, so that value
    is now available to svcauth_gss_prepare_to_wrap() to make its
    decision to wrap, based on direct information about the
    authentication status of the RPC caller.
    
    No behavior change is intended, this simply replaces some old code
    with something that should be more self-documenting.
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    99d074d6
svcauth_gss.c 50.6 KB