From cb21a7182f9d73ad544f33f5cdec6d2be9a8cd4f Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Sat, 7 Feb 2004 16:45:27 +0100 Subject: [PATCH] RPCSEC_GSS: Move the gss sequence number history from the task structure to the request structure, where it makes more sense. In particular, when we start storing more sequence number history (necessary to process responses to resent requests correctly), this will make it easier to initialize the necessary data structure in the right place (in xprt_request_init). --- include/linux/sunrpc/sched.h | 2 -- include/linux/sunrpc/xprt.h | 1 + net/sunrpc/auth_gss/auth_gss.c | 10 +++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 5e2d23e0ce6c2..1113d7f3df138 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h @@ -48,8 +48,6 @@ struct rpc_task { __u8 tk_garb_retry, tk_cred_retry, tk_suid_retry; - u32 tk_gss_seqno; /* rpcsec_gss sequence number - used on this request */ /* * timeout_fn to be executed by timer bottom half diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index e29381edeaeaf..8472b1c5ad2e7 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h @@ -95,6 +95,7 @@ struct rpc_rqst { struct rpc_rqst * rq_next; /* free list */ int rq_cong; /* has incremented xprt->cong */ int rq_received; /* receive completed */ + u32 rq_seqno; /* gss seq no. used on req. */ struct list_head rq_list; diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c index 1a4b9f504aa22..ef57f1942ea4c 100644 --- a/net/sunrpc/auth_gss/auth_gss.c +++ b/net/sunrpc/auth_gss/auth_gss.c @@ -690,12 +690,12 @@ gss_marshal(struct rpc_task *task, u32 *p, int ruid) goto out_put_ctx; } spin_lock(&ctx->gc_seq_lock); - task->tk_gss_seqno = ctx->gc_seq++; + req->rq_seqno = ctx->gc_seq++; spin_unlock(&ctx->gc_seq_lock); *p++ = htonl((u32) RPC_GSS_VERSION); *p++ = htonl((u32) ctx->gc_proc); - *p++ = htonl((u32) task->tk_gss_seqno); + *p++ = htonl((u32) req->rq_seqno); *p++ = htonl((u32) service); p = xdr_encode_netobj(p, &ctx->gc_wire_ctx); *cred_len = htonl((p - (cred_len + 1)) << 2); @@ -766,7 +766,7 @@ gss_validate(struct rpc_task *task, u32 *p) goto out_bad; if (flav != RPC_AUTH_GSS) goto out_bad; - seq = htonl(task->tk_gss_seqno); + seq = htonl(task->tk_rqstp->rq_seqno); iov.iov_base = &seq; iov.iov_len = sizeof(seq); xdr_buf_from_iov(&iov, &verf_buf); @@ -832,7 +832,7 @@ gss_wrap_req(struct rpc_task *task, integ_len = p++; offset = (u8 *)p - (u8 *)snd_buf->head[0].iov_base; - *p++ = htonl(task->tk_gss_seqno); + *p++ = htonl(req->rq_seqno); status = encode(rqstp, p, obj); if (status) @@ -909,7 +909,7 @@ gss_unwrap_resp(struct rpc_task *task, mic_offset = integ_len + data_offset; if (mic_offset > rcv_buf->len) goto out; - if (ntohl(*p++) != task->tk_gss_seqno) + if (ntohl(*p++) != req->rq_seqno) goto out; if (xdr_buf_subsegment(rcv_buf, &integ_buf, data_offset, -- 2.53.0