
From: Trond Myklebust <trond.myklebust@fys.uio.no>

The following patch (backported from the NFSv4 code) should do the right
thing.


---

 25-akpm/fs/nfs/nfs3xdr.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff -puN fs/nfs/nfs3xdr.c~nfs-long-symlinks-fix fs/nfs/nfs3xdr.c
--- 25/fs/nfs/nfs3xdr.c~nfs-long-symlinks-fix	2004-05-16 00:06:51.286279224 -0700
+++ 25-akpm/fs/nfs/nfs3xdr.c	2004-05-16 00:06:51.290278616 -0700
@@ -742,8 +742,11 @@ nfs3_xdr_readlinkres(struct rpc_rqst *re
 	strlen = (u32*)kmap_atomic(rcvbuf->pages[0], KM_USER0);
 	/* Convert length of symlink */
 	len = ntohl(*strlen);
-	if (len > rcvbuf->page_len)
-		len = rcvbuf->page_len;
+	if (len > PAGE_CACHE_SIZE - 5) {
+		printk(KERN_WARNING "nfs: server returned giant symlink!\n");
+		kunmap_atomic(strlen, KM_USER0);
+		return -EIO;
+	}
 	*strlen = len;
 	/* NULL terminate the string we got */
 	string = (char *)(strlen + 1);

_
