mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 01:04:08 +08:00
lockd: Store the lockd client credential in struct nlm_host
When we create a new lockd client, we want to be able to pass the correct credential of the process that created the struct nlm_host. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
3b7eb5e35d
commit
b422df915c
@ -63,7 +63,7 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
|
|||||||
host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
|
host = nlmclnt_lookup_host(nlm_init->address, nlm_init->addrlen,
|
||||||
nlm_init->protocol, nlm_version,
|
nlm_init->protocol, nlm_version,
|
||||||
nlm_init->hostname, nlm_init->noresvport,
|
nlm_init->hostname, nlm_init->noresvport,
|
||||||
nlm_init->net);
|
nlm_init->net, nlm_init->cred);
|
||||||
if (host == NULL)
|
if (host == NULL)
|
||||||
goto out_nohost;
|
goto out_nohost;
|
||||||
if (host->h_rpcclnt == NULL && nlm_bind_host(host) == NULL)
|
if (host->h_rpcclnt == NULL && nlm_bind_host(host) == NULL)
|
||||||
|
@ -60,6 +60,7 @@ struct nlm_lookup_host_info {
|
|||||||
const size_t hostname_len; /* it's length */
|
const size_t hostname_len; /* it's length */
|
||||||
const int noresvport; /* use non-priv port */
|
const int noresvport; /* use non-priv port */
|
||||||
struct net *net; /* network namespace to bind */
|
struct net *net; /* network namespace to bind */
|
||||||
|
const struct cred *cred;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -162,6 +163,7 @@ static struct nlm_host *nlm_alloc_host(struct nlm_lookup_host_info *ni,
|
|||||||
host->h_nsmhandle = nsm;
|
host->h_nsmhandle = nsm;
|
||||||
host->h_addrbuf = nsm->sm_addrbuf;
|
host->h_addrbuf = nsm->sm_addrbuf;
|
||||||
host->net = ni->net;
|
host->net = ni->net;
|
||||||
|
host->h_cred = get_cred(ni->cred),
|
||||||
strlcpy(host->nodename, utsname()->nodename, sizeof(host->nodename));
|
strlcpy(host->nodename, utsname()->nodename, sizeof(host->nodename));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
@ -188,6 +190,7 @@ static void nlm_destroy_host_locked(struct nlm_host *host)
|
|||||||
clnt = host->h_rpcclnt;
|
clnt = host->h_rpcclnt;
|
||||||
if (clnt != NULL)
|
if (clnt != NULL)
|
||||||
rpc_shutdown_client(clnt);
|
rpc_shutdown_client(clnt);
|
||||||
|
put_cred(host->h_cred);
|
||||||
kfree(host);
|
kfree(host);
|
||||||
|
|
||||||
ln->nrhosts--;
|
ln->nrhosts--;
|
||||||
@ -202,6 +205,8 @@ static void nlm_destroy_host_locked(struct nlm_host *host)
|
|||||||
* @version: NLM protocol version
|
* @version: NLM protocol version
|
||||||
* @hostname: '\0'-terminated hostname of server
|
* @hostname: '\0'-terminated hostname of server
|
||||||
* @noresvport: 1 if non-privileged port should be used
|
* @noresvport: 1 if non-privileged port should be used
|
||||||
|
* @net: pointer to net namespace
|
||||||
|
* @cred: pointer to cred
|
||||||
*
|
*
|
||||||
* Returns an nlm_host structure that matches the passed-in
|
* Returns an nlm_host structure that matches the passed-in
|
||||||
* [server address, transport protocol, NLM version, server hostname].
|
* [server address, transport protocol, NLM version, server hostname].
|
||||||
@ -214,7 +219,8 @@ struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
|||||||
const u32 version,
|
const u32 version,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
int noresvport,
|
int noresvport,
|
||||||
struct net *net)
|
struct net *net,
|
||||||
|
const struct cred *cred)
|
||||||
{
|
{
|
||||||
struct nlm_lookup_host_info ni = {
|
struct nlm_lookup_host_info ni = {
|
||||||
.server = 0,
|
.server = 0,
|
||||||
@ -226,6 +232,7 @@ struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
|||||||
.hostname_len = strlen(hostname),
|
.hostname_len = strlen(hostname),
|
||||||
.noresvport = noresvport,
|
.noresvport = noresvport,
|
||||||
.net = net,
|
.net = net,
|
||||||
|
.cred = cred,
|
||||||
};
|
};
|
||||||
struct hlist_head *chain;
|
struct hlist_head *chain;
|
||||||
struct nlm_host *host;
|
struct nlm_host *host;
|
||||||
@ -458,7 +465,7 @@ nlm_bind_host(struct nlm_host *host)
|
|||||||
.authflavor = RPC_AUTH_UNIX,
|
.authflavor = RPC_AUTH_UNIX,
|
||||||
.flags = (RPC_CLNT_CREATE_NOPING |
|
.flags = (RPC_CLNT_CREATE_NOPING |
|
||||||
RPC_CLNT_CREATE_AUTOBIND),
|
RPC_CLNT_CREATE_AUTOBIND),
|
||||||
.cred = current_cred(),
|
.cred = host->h_cred,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -46,6 +46,7 @@ struct nlmclnt_initdata {
|
|||||||
int noresvport;
|
int noresvport;
|
||||||
struct net *net;
|
struct net *net;
|
||||||
const struct nlmclnt_operations *nlmclnt_ops;
|
const struct nlmclnt_operations *nlmclnt_ops;
|
||||||
|
const struct cred *cred;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -70,6 +70,7 @@ struct nlm_host {
|
|||||||
struct nsm_handle *h_nsmhandle; /* NSM status handle */
|
struct nsm_handle *h_nsmhandle; /* NSM status handle */
|
||||||
char *h_addrbuf; /* address eyecatcher */
|
char *h_addrbuf; /* address eyecatcher */
|
||||||
struct net *net; /* host net */
|
struct net *net; /* host net */
|
||||||
|
const struct cred *h_cred;
|
||||||
char nodename[UNX_MAXNODENAME + 1];
|
char nodename[UNX_MAXNODENAME + 1];
|
||||||
const struct nlmclnt_operations *h_nlmclnt_ops; /* Callback ops for NLM users */
|
const struct nlmclnt_operations *h_nlmclnt_ops; /* Callback ops for NLM users */
|
||||||
};
|
};
|
||||||
@ -229,7 +230,8 @@ struct nlm_host *nlmclnt_lookup_host(const struct sockaddr *sap,
|
|||||||
const u32 version,
|
const u32 version,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
int noresvport,
|
int noresvport,
|
||||||
struct net *net);
|
struct net *net,
|
||||||
|
const struct cred *cred);
|
||||||
void nlmclnt_release_host(struct nlm_host *);
|
void nlmclnt_release_host(struct nlm_host *);
|
||||||
struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,
|
struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
|
Loading…
Reference in New Issue
Block a user