• Chuck Lever's avatar
    SUNRPC: Use AF_LOCAL for rpcbind upcalls · 7402ab19
    Chuck Lever authored
    As libtirpc does in user space, have our registration API try using an
    AF_LOCAL transport first when registering and unregistering.
    
    This means we don't chew up privileged ports, and our registration is
    bound to an "owner" (the effective uid of the process on the sending
    end of the transport).  Only that "owner" may unregister the service.
    
    The kernel could probe rpcbind via an rpcbind query to determine
    whether rpcbind has an AF_LOCAL service. For simplicity, we use the
    same technique that libtirpc uses: simply fail over to network
    loopback if creating an AF_LOCAL transport to the well-known rpcbind
    service socket fails.
    
    This means we open-code the pathname of the rpcbind socket in the
    kernel.  For now we have to do that anyway because the kernel's
    RPC over AF_LOCAL implementation does not support autobind.  That may
    be undesirable in the long term.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    7402ab19
svc.c 30.8 KB