diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-10 15:19:58 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-08-10 15:19:58 -0700 | 
| commit | 022e5d098b3bcc4a9a75c24e910a08ff9d2321d2 (patch) | |
| tree | 3d73743a2258b03a7e7c5b52500d4d01f75c9424 | |
| parent | 1e24f76e231f2b68b01b61610ec235f7ea331513 (diff) | |
| parent | 58cd57bfd9db3bc213bf9d6a10920f82095f0114 (diff) | |
Merge branch 'for-3.11' of git://linux-nfs.org/~bfields/linux
Pull nfsd fixes from Bruce Fields:
 "Some fixes for a 4.1 feature that in retrospect probably should have
  waited for 3.12....  But it appears to be working now"
* 'for-3.11' of git://linux-nfs.org/~bfields/linux:
  nfsd: Fix SP4_MACH_CRED negotiation in EXCHANGE_ID
  nfsd4: Fix MACH_CRED NULL dereference
| -rw-r--r-- | fs/nfsd/nfs4proc.c | 2 | ||||
| -rw-r--r-- | fs/nfsd/nfs4state.c | 2 | ||||
| -rw-r--r-- | fs/nfsd/nfs4xdr.c | 5 | 
3 files changed, 5 insertions, 4 deletions
| diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index 0d4c410e4589..419572f33b72 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -1524,7 +1524,7 @@ static inline u32 nfsd4_write_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)  static inline u32 nfsd4_exchange_id_rsize(struct svc_rqst *rqstp, struct nfsd4_op *op)  {  	return (op_encode_hdr_size + 2 + 1 + /* eir_clientid, eir_sequenceid */\ -		1 + 1 + 0 + /* eir_flags, spr_how, SP4_NONE (for now) */\ +		1 + 1 + 2 + /* eir_flags, spr_how, spo_must_enforce & _allow */\  		2 + /*eir_server_owner.so_minor_id */\  		/* eir_server_owner.so_major_id<> */\  		XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + 1 +\ diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 280acef6f0dc..43f42290e5df 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -1264,6 +1264,8 @@ static bool svc_rqst_integrity_protected(struct svc_rqst *rqstp)  	struct svc_cred *cr = &rqstp->rq_cred;  	u32 service; +	if (!cr->cr_gss_mech) +		return false;  	service = gss_pseudoflavor_to_service(cr->cr_gss_mech, cr->cr_flavor);  	return service == RPC_GSS_SVC_INTEGRITY ||  	       service == RPC_GSS_SVC_PRIVACY; diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index 0c0f3ea90de5..c2a4701d7286 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -3360,7 +3360,8 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr,  		8 /* eir_clientid */ +  		4 /* eir_sequenceid */ +  		4 /* eir_flags */ + -		4 /* spr_how (SP4_NONE) */ + +		4 /* spr_how */ + +		8 /* spo_must_enforce, spo_must_allow */ +  		8 /* so_minor_id */ +  		4 /* so_major_id.len */ +  		(XDR_QUADLEN(major_id_sz) * 4) + @@ -3372,8 +3373,6 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr,  	WRITE32(exid->seqid);  	WRITE32(exid->flags); -	/* state_protect4_r. Currently only support SP4_NONE */ -	BUG_ON(exid->spa_how != SP4_NONE);  	WRITE32(exid->spa_how);  	switch (exid->spa_how) {  	case SP4_NONE: | 
