|
@@ -1146,7 +1146,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
|
|
|
case RPC_GSS_SVC_INTEGRITY:
|
|
|
if (unwrap_integ_data(&rqstp->rq_arg,
|
|
|
gc->gc_seq, rsci->mechctx))
|
|
|
- goto auth_err;
|
|
|
+ goto garbage_args;
|
|
|
/* placeholders for length and seq. number: */
|
|
|
svc_putnl(resv, 0);
|
|
|
svc_putnl(resv, 0);
|
|
@@ -1154,7 +1154,7 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
|
|
|
case RPC_GSS_SVC_PRIVACY:
|
|
|
if (unwrap_priv_data(rqstp, &rqstp->rq_arg,
|
|
|
gc->gc_seq, rsci->mechctx))
|
|
|
- goto auth_err;
|
|
|
+ goto garbage_args;
|
|
|
/* placeholders for length and seq. number: */
|
|
|
svc_putnl(resv, 0);
|
|
|
svc_putnl(resv, 0);
|
|
@@ -1169,6 +1169,11 @@ svcauth_gss_accept(struct svc_rqst *rqstp, __be32 *authp)
|
|
|
ret = SVC_OK;
|
|
|
goto out;
|
|
|
}
|
|
|
+garbage_args:
|
|
|
+ /* Restore write pointer to its original value: */
|
|
|
+ xdr_ressize_check(rqstp, reject_stat);
|
|
|
+ ret = SVC_GARBAGE;
|
|
|
+ goto out;
|
|
|
auth_err:
|
|
|
/* Restore write pointer to its original value: */
|
|
|
xdr_ressize_check(rqstp, reject_stat);
|