diff options
author | Kinglong Mee <kinglongmee@gmail.com> | 2013-12-23 05:11:02 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2014-01-03 18:18:48 -0500 |
commit | 8a891633b832874e2a1545abbddfd33ba22eb016 (patch) | |
tree | 75b8b43cc63a659d1e3ea803cf404c900924910a /fs/nfsd/nfs4state.c | |
parent | f403e450e85cd403b63fd163d29b6b7f5e8eaf77 (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.c | 9 |
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 | |||
1856 | static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca) | 1861 | static __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) |