Commit cc38bac3 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

NFS: Ensure NFSv4 SETCLIENTID send buffer is large enough



Ensure that the RPC buffer size specified for NFSv4 SETCLIENTID procedures
matches what we are encoding into the buffer.  See the definition of
struct nfs4_setclientid {} and the encode_setclientid() function.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 0fb2b7e9
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -116,10 +116,12 @@ static int nfs4_stat_to_errno(int);
#define decode_renew_maxsz	(op_decode_hdr_maxsz)
#define encode_setclientid_maxsz \
				(op_encode_hdr_maxsz + \
				4 /*server->ip_addr*/ + \
				1 /*Netid*/ + \
				6 /*uaddr*/ + \
				6 + (NFS4_VERIFIER_SIZE >> 2))
				XDR_QUADLEN(NFS4_VERIFIER_SIZE) + \
				XDR_QUADLEN(NFS4_SETCLIENTID_NAMELEN) + \
				1 /* sc_prog */ + \
				XDR_QUADLEN(RPCBIND_MAXNETIDLEN) + \
				XDR_QUADLEN(RPCBIND_MAXUADDRLEN) + \
				1) /* sc_cb_ident */
#define decode_setclientid_maxsz \
				(op_decode_hdr_maxsz + \
				2 + \
+7 −6
Original line number Diff line number Diff line
@@ -666,16 +666,17 @@ struct nfs4_rename_res {
	struct nfs_fattr *		new_fattr;
};

#define NFS4_SETCLIENTID_NAMELEN	(48)
struct nfs4_setclientid {
	const nfs4_verifier *		sc_verifier;      /* request */
	const nfs4_verifier *		sc_verifier;
	unsigned int			sc_name_len;
	char				sc_name[48];	  /* request */
	u32				sc_prog;          /* request */
	char				sc_name[NFS4_SETCLIENTID_NAMELEN];
	u32				sc_prog;
	unsigned int			sc_netid_len;
	char				sc_netid[4];	  /* request */
	char				sc_netid[RPCBIND_MAXNETIDLEN];
	unsigned int			sc_uaddr_len;
	char				sc_uaddr[24];     /* request */
	u32				sc_cb_ident;      /* request */
	char				sc_uaddr[RPCBIND_MAXUADDRLEN];
	u32				sc_cb_ident;
};

struct nfs4_statfs_arg {