瀏覽代碼

nfsd41: sanity check client drc maxreqs

Ensure the client requested maximum requests are between 1 and
NFSD_MAX_SLOTS_PER_SESSION

Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Andy Adamson 16 年之前
父節點
當前提交
5d77ddfbcb
共有 1 個文件被更改,包括 5 次插入0 次删除
  1. 5 0
      fs/nfsd/nfs4state.c

+ 5 - 0
fs/nfsd/nfs4state.c

@@ -425,6 +425,11 @@ static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan)
 {
 {
 	int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT;
 	int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT;
 
 
+	if (fchan->maxreqs < 1)
+		return nfserr_inval;
+	else if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION)
+		fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION;
+
 	spin_lock(&nfsd_serv->sv_lock);
 	spin_lock(&nfsd_serv->sv_lock);
 	if (np + nfsd_serv->sv_drc_pages_used > nfsd_serv->sv_drc_max_pages)
 	if (np + nfsd_serv->sv_drc_pages_used > nfsd_serv->sv_drc_max_pages)
 		np = nfsd_serv->sv_drc_max_pages - nfsd_serv->sv_drc_pages_used;
 		np = nfsd_serv->sv_drc_max_pages - nfsd_serv->sv_drc_pages_used;