NFSD: fix bad length checking for backchannel
Subsystems (2)
PATCH 1/1 NFSD: fix bad length checking for backchannel
the length for backchannel checking should be multiplied by sizeof(__be32).
Signed-off-by Kinglong Mee <[email protected]>
--- fs/nfsd/nfs4state.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
fs/nfsd/nfs4state.c +7 -2
@@ -1851,6 +1851,11 @@ static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsreturn nfs_ok; } +#define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \ + RPC_MAX_HEADER_WITH_AUTH) * sizeof(__be32)) +#define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \ + RPC_MAX_REPHEADER_WITH_AUTH) * sizeof(__be32)) +static __be32 check_backchannel_attrs (struct nfsd4_channel_attrs *ca) { ca->headerpadsz =0 ;
@@ -1861,9 +1866,9 @@ static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca)* less than 1k. Tighten up this estimate in the unlikely event * it turns out to be a problem for some client: */ -if (ca->maxreq_sz < NFS4_enc_cb_recall_sz +RPC_MAX_HEADER_WITH_AUTH ) +if (ca->maxreq_sz <NFSD_CB_MAX_REQ_SZ )return nfserr_toosmall; -if (ca->maxresp_sz < NFS4_dec_cb_recall_sz +RPC_MAX_REPHEADER_WITH_AUTH ) +if (ca->maxresp_sz <NFSD_CB_MAX_RESP_SZ )return nfserr_toosmall; ca->maxresp_cached =0 ;if (ca->maxops <2 )
Signature · 1 line
1.8.4.2
Quoted 1 line · Kinglong Mee
the length for backchannel checking should be multiplied by
sizeof(__be32).
Thanks, applying.
--b.
Quoted 36 lines
Signed-off-by Kinglong Mee <[email protected]>--- fs/nfsd/nfs4state.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)fs/nfsd/nfs4state.c +7
-2@@ -1851,6 +1851,11 @@ static __be32 check_forechannel_attrs(struct nfsd4_channel_attrs *ca, struct nfsreturn nfs_ok; } +#define NFSD_CB_MAX_REQ_SZ ((NFS4_enc_cb_recall_sz + \ + RPC_MAX_HEADER_WITH_AUTH) * sizeof(__be32)) +#define NFSD_CB_MAX_RESP_SZ ((NFS4_dec_cb_recall_sz + \ + RPC_MAX_REPHEADER_WITH_AUTH) * sizeof(__be32)) +static __be32 check_backchannel_attrs (struct nfsd4_channel_attrs *ca) { ca->headerpadsz =0 ;@@ -1861,9 +1866,9 @@ static __be32 check_backchannel_attrs(struct nfsd4_channel_attrs *ca)* less than 1k. Tighten up this estimate in the unlikely event * it turns out to be a problem for some client: */ -if (ca->maxreq_sz < NFS4_enc_cb_recall_sz +RPC_MAX_HEADER_WITH_AUTH ) +if (ca->maxreq_sz <NFSD_CB_MAX_REQ_SZ )return nfserr_toosmall; -if (ca->maxresp_sz < NFS4_dec_cb_recall_sz +RPC_MAX_REPHEADER_WITH_AUTH ) +if (ca->maxresp_sz <NFSD_CB_MAX_RESP_SZ )return nfserr_toosmall; ca->maxresp_cached =0 ;if (ca->maxops <2 )Signature · 1 line
1.8.4.2