mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
SUNRPC: pass a keyring serial number to the TLS handshake
The handshake upcall links the keyring named in ta_keyring into tlshd's process keyring before tlshd reads the client certificate and private key. That link is how tlshd gains possession of keys that grant no user read permission. xprtsock never fills the field, so an x509 handshake can present only keys that tlshd's own credentials can read. Add a keyring serial number to struct xprtsec_parms and pass it to the x509 handshake, so an RPC client can name the keyring that holds its credentials. Signed-off-by: Chuck Lever <cel@kernel.org> Signed-off-by: Anna Schumaker <anna.schumaker@hammerspace.com>
This commit is contained in:
parent
d8884f64c9
commit
7856eb255e
|
|
@ -1750,6 +1750,7 @@ static int nfs_init_fs_context(struct fs_context *fc)
|
|||
ctx->minorversion = 0;
|
||||
ctx->need_mount = true;
|
||||
ctx->xprtsec.policy = RPC_XPRTSEC_NONE;
|
||||
ctx->xprtsec.keyring_serial = TLS_NO_KEYRING;
|
||||
ctx->xprtsec.cert_serial = TLS_NO_CERT;
|
||||
ctx->xprtsec.privkey_serial = TLS_NO_PRIVKEY;
|
||||
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv,
|
|||
.cred = mds_srv->cred,
|
||||
.xprtsec = {
|
||||
.policy = RPC_XPRTSEC_NONE,
|
||||
.keyring_serial = TLS_NO_KEYRING,
|
||||
.cert_serial = TLS_NO_CERT,
|
||||
.privkey_serial = TLS_NO_PRIVKEY,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -812,6 +812,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
|
|||
.cred = mds_srv->cred,
|
||||
.xprtsec = {
|
||||
.policy = RPC_XPRTSEC_NONE,
|
||||
.keyring_serial = TLS_NO_KEYRING,
|
||||
.cert_serial = TLS_NO_CERT,
|
||||
.privkey_serial = TLS_NO_PRIVKEY,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ struct xprtsec_parms {
|
|||
enum xprtsec_policies policy;
|
||||
|
||||
/* authentication material */
|
||||
key_serial_t keyring_serial;
|
||||
key_serial_t cert_serial;
|
||||
key_serial_t privkey_serial;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2637,6 +2637,7 @@ static int xs_tls_handshake_sync(struct rpc_xprt *lower_xprt, struct xprtsec_par
|
|||
goto out_put_xprt;
|
||||
break;
|
||||
case RPC_XPRTSEC_TLS_X509:
|
||||
args.ta_keyring = xprtsec->keyring_serial;
|
||||
args.ta_my_cert = xprtsec->cert_serial;
|
||||
args.ta_my_privkey = xprtsec->privkey_serial;
|
||||
rc = tls_client_hello_x509(&args, GFP_KERNEL);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user