On Tue, Nov 09, 2010 at 09:39:23AM +0800, Mi Jinlong wrote: > According to RFC, the argument of ssv_sp_parms4 is: > > struct ssv_sp_parms4 { > state_protect_ops4 ssp_ops; > sec_oid4 ssp_hash_algs<>; > sec_oid4 ssp_encr_algs<>; > uint32_t ssp_window; > uint32_t ssp_num_gss_handles; > }; > > If client send a exchange_id with SP4_SSV, server cann't decode > the SP4_SSV's ssp_hash_algs and ssp_encr_algs arguments correctly. > > Because the kernel treat the two arguments as a signal > sec_oid4 struct, but should be a set of sec_oid4 struct. That looks correct, thanks. (How are you testing this?) --b. > > Signed-off-by: Mi Jinlong <mijinlong@xxxxxxxxxxxxxx> > --- > fs/nfsd/nfs4xdr.c | 22 +++++++++++++++------- > 1 files changed, 15 insertions(+), 7 deletions(-) > > diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c > index f35a94a..71d7d33 100644 > --- a/fs/nfsd/nfs4xdr.c > +++ b/fs/nfsd/nfs4xdr.c > @@ -1005,7 +1005,7 @@ static __be32 > nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, > struct nfsd4_exchange_id *exid) > { > - int dummy; > + int dummy, tmp; > DECODE_HEAD; > > READ_BUF(NFS4_VERIFIER_SIZE); > @@ -1053,15 +1053,23 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, > > /* ssp_hash_algs<> */ > READ_BUF(4); > - READ32(dummy); > - READ_BUF(dummy); > - p += XDR_QUADLEN(dummy); > + READ32(tmp); > + while (tmp--) { > + READ_BUF(4); > + READ32(dummy); > + READ_BUF(dummy); > + p += XDR_QUADLEN(dummy); > + } > > /* ssp_encr_algs<> */ > READ_BUF(4); > - READ32(dummy); > - READ_BUF(dummy); > - p += XDR_QUADLEN(dummy); > + READ32(tmp); > + while (tmp--) { > + READ_BUF(4); > + READ32(dummy); > + READ_BUF(dummy); > + p += XDR_QUADLEN(dummy); > + } > > /* ssp_window and ssp_num_gss_handles */ > READ_BUF(8); > -- 1.7.0.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html