|
@@ -838,6 +838,14 @@ unwrap_integ_data(struct svc_rqst *rqstp, struct xdr_buf *buf, u32 seq, struct g
|
|
|
struct xdr_netobj mic;
|
|
struct xdr_netobj mic;
|
|
|
struct xdr_buf integ_buf;
|
|
struct xdr_buf integ_buf;
|
|
|
|
|
|
|
|
|
|
+ /* NFS READ normally uses splice to send data in-place. However
|
|
|
|
|
+ * the data in cache can change after the reply's MIC is computed
|
|
|
|
|
+ * but before the RPC reply is sent. To prevent the client from
|
|
|
|
|
+ * rejecting the server-computed MIC in this somewhat rare case,
|
|
|
|
|
+ * do not use splice with the GSS integrity service.
|
|
|
|
|
+ */
|
|
|
|
|
+ clear_bit(RQ_SPLICE_OK, &rqstp->rq_flags);
|
|
|
|
|
+
|
|
|
/* Did we already verify the signature on the original pass through? */
|
|
/* Did we already verify the signature on the original pass through? */
|
|
|
if (rqstp->rq_deferred)
|
|
if (rqstp->rq_deferred)
|
|
|
return 0;
|
|
return 0;
|