• Eric W. Biederman's avatar
    sunrpc: Properly encode kuids and kgids in auth.unix.gid rpc pipe upcalls. · 25da9263
    Eric W. Biederman authored
    When a new rpc connection is established with an in-kernel server, the
    traffic passes through svc_process_common, and svc_set_client and down
    into svcauth_unix_set_client if it is of type RPC_AUTH_NULL or
    RPC_AUTH_UNIX.
    
    svcauth_unix_set_client then looks at the uid of the credential we
    have assigned to the incomming client and if we don't have the groups
    already cached makes an upcall to get a list of groups that the client
    can use.
    
    The upcall encodes send a rpc message to user space encoding the uid
    of the user whose groups we want to know.  Encode the kuid of the user
    in the initial user namespace as nfs mounts can only happen today in
    the initial user namespace.
    
    When a reply to an upcall comes in convert interpret the uid and gid values
    from the rpc pipe as uids and gids in the initial user namespace and convert
    them into kuids and kgids before processing them further.
    
    When reading proc files listing the uid to gid list cache convert the
    kuids and kgids from into uids and gids the initial user namespace.  As we are
    displaying server internal details it makes sense to display these values
    from the servers perspective.
    
    Cc: "J. Bruce Fields" <bfields@fieldses.org>
    Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    25da9263
svcauth_unix.c 21.1 KB