diff -urN linux-2.4.27-pre3/fs/nfs/nfs2xdr.c linux-2.4.27-pre3-nfs-symlink/fs/nfs/nfs2xdr.c
--- linux-2.4.27-pre3/fs/nfs/nfs2xdr.c	Tue Jan  7 15:50:41 2003
+++ linux-2.4.27-pre3-nfs-symlink/fs/nfs/nfs2xdr.c	Fri May 21 00:33:39 2004
@@ -571,8 +571,11 @@
 	strlen = (u32*)kmap(rcvbuf->pages[0]);
 	/* 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(rcvbuf->pages[0]);
+		return -ENAMETOOLONG;
+	}
 	*strlen = len;
 	/* NULL terminate the string we got */
 	string = (char *)(strlen + 1);
diff -urN linux-2.4.27-pre3/fs/nfs/nfs3xdr.c linux-2.4.27-pre3-nfs-symlink/fs/nfs/nfs3xdr.c
--- linux-2.4.27-pre3/fs/nfs/nfs3xdr.c	Thu Oct 23 10:11:36 2003
+++ linux-2.4.27-pre3-nfs-symlink/fs/nfs/nfs3xdr.c	Fri May 21 00:32:44 2004
@@ -759,8 +759,11 @@
 	strlen = (u32*)kmap(rcvbuf->pages[0]);
 	/* 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(rcvbuf->pages[0]);
+		return -ENAMETOOLONG;
+	}
 	*strlen = len;
 	/* NULL terminate the string we got */
 	string = (char *)(strlen + 1);