aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
authorKinglong Mee <kinglongmee@gmail.com>2013-12-23 05:11:02 -0500
committerJ. Bruce Fields <bfields@redhat.com>2014-01-03 18:18:48 -0500
commit8a891633b832874e2a1545abbddfd33ba22eb016 (patch)
tree75b8b43cc63a659d1e3ea803cf404c900924910a /fs/nfsd/nfs4state.c
parentf403e450e85cd403b63fd163d29b6b7f5e8eaf77 (diff)
NFSD: fix bad length checking for backchannel
the length for backchannel checking should be multiplied by sizeof(__be32). Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 9a6d088247fd..acb95026ae3b 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1853,6 +1853,11 @@ static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfs
1853 return nfs_ok; 1853 return nfs_ok;
1854} 1854}
1855 1855
1856#define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \
1857 RPC_MAX_HEADER_WITH_AUTH) * sizeof(__be32))
1858#define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \
1859 RPC_MAX_REPHEADER_WITH_AUTH) * sizeof(__be32))
1860
1856static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca) 1861static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca)
1857{ 1862{
1858 ca->headerpadsz = 0; 1863 ca->headerpadsz = 0;
@@ -1863,9 +1868,9 @@ static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca)
1863 * less than 1k. Tighten up this estimate in the unlikely event 1868 * less than 1k. Tighten up this estimate in the unlikely event
1864 * it turns out to be a problem for some client: 1869 * it turns out to be a problem for some client:
1865 */ 1870 */
1866 if (ca->maxreq_sz < NFS4_enc_cb_recall_sz + RPC_MAX_HEADER_WITH_AUTH) 1871 if (ca->maxreq_sz < NFSD_CB_MAX_REQ_SZ)
1867 return nfserr_toosmall; 1872 return nfserr_toosmall;
1868 if (ca->maxresp_sz < NFS4_dec_cb_recall_sz + RPC_MAX_REPHEADER_WITH_AUTH) 1873 if (ca->maxresp_sz < NFSD_CB_MAX_RESP_SZ)
1869 return nfserr_toosmall; 1874 return nfserr_toosmall;
1870 ca->maxresp_cached = 0; 1875 ca->maxresp_cached = 0;
1871 if (ca->maxops < 2) 1876 if (ca->maxops < 2)