summaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprt.c
diff options
context:
space:
mode:
authorTrond Myklebust2018-08-14 19:50:21 +0200
committerTrond Myklebust2018-09-30 21:35:13 +0200
commit3021a5bbbf0aa0252f2993b84ee903a0eca0b690 (patch)
treebf303cbc4c0a4f7e9b51b8944202ed43cf953b35 /net/sunrpc/xprt.c
parentSUNRPC: If there is no reply expected, bail early from call_decode (diff)
downloadkernel-qcow2-linux-3021a5bbbf0aa0252f2993b84ee903a0eca0b690.tar.gz
kernel-qcow2-linux-3021a5bbbf0aa0252f2993b84ee903a0eca0b690.tar.xz
kernel-qcow2-linux-3021a5bbbf0aa0252f2993b84ee903a0eca0b690.zip
SUNRPC: The transmitted message must lie in the RPCSEC window of validity
If a message has been encoded using RPCSEC_GSS, the server is maintaining a window of sequence numbers that it considers valid. The client should normally be tracking that window, and needs to verify that the sequence number used by the message being transmitted still lies inside the window of validity. So far, we've been able to assume this condition would be realised automatically, since the client has been encoding the message only after taking the socket lock. Once we change that condition, we will need the explicit check. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'net/sunrpc/xprt.c')
-rw-r--r--net/sunrpc/xprt.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
index 6aa09edc9567..3973e10ea2bd 100644
--- a/net/sunrpc/xprt.c
+++ b/net/sunrpc/xprt.c
@@ -1014,6 +1014,13 @@ void xprt_transmit(struct rpc_task *task)
dprintk("RPC: %5u xprt_transmit(%u)\n", task->tk_pid, req->rq_slen);
if (!req->rq_reply_bytes_recvd) {
+
+ /* Verify that our message lies in the RPCSEC_GSS window */
+ if (!req->rq_bytes_sent && rpcauth_xmit_need_reencode(task)) {
+ task->tk_status = -EBADMSG;
+ return;
+ }
+
if (list_empty(&req->rq_list) && rpc_reply_expected(task)) {
/*
* Add to the list only if we're expecting a reply