## Automatically generated incremental diff
## From:   linux-2.4.26-rc3
## To:     linux-2.4.26-rc4
## Robot:  $Id: make-incremental-diff,v 1.12 2004/01/06 07:19:36 hpa Exp $

diff -urN linux-2.4.26-rc3/Makefile linux-2.4.26-rc4/Makefile
--- linux-2.4.26-rc3/Makefile	2004-04-14 05:51:41.000000000 -0700
+++ linux-2.4.26-rc4/Makefile	2004-04-14 05:51:50.000000000 -0700
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 26
-EXTRAVERSION = -rc3
+EXTRAVERSION = -rc4
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
diff -urN linux-2.4.26-rc3/arch/ppc/kernel/ppc_ksyms.c linux-2.4.26-rc4/arch/ppc/kernel/ppc_ksyms.c
--- linux-2.4.26-rc3/arch/ppc/kernel/ppc_ksyms.c	2004-02-18 05:36:30.000000000 -0800
+++ linux-2.4.26-rc4/arch/ppc/kernel/ppc_ksyms.c	2004-04-14 05:51:51.000000000 -0700
@@ -161,6 +161,8 @@
 EXPORT_SYMBOL(_outsl_ns);
 EXPORT_SYMBOL(iopa);
 EXPORT_SYMBOL(mm_ptov);
+EXPORT_SYMBOL(vmalloc_start);
+EXPORT_SYMBOL(ioremap_bot);
 EXPORT_SYMBOL(ioremap);
 #ifdef CONFIG_PTE_64BIT
 EXPORT_SYMBOL(ioremap64);
diff -urN linux-2.4.26-rc3/fs/isofs/rock.c linux-2.4.26-rc4/fs/isofs/rock.c
--- linux-2.4.26-rc3/fs/isofs/rock.c	2002-02-25 11:38:08.000000000 -0800
+++ linux-2.4.26-rc4/fs/isofs/rock.c	2004-04-14 05:51:59.000000000 -0700
@@ -14,6 +14,7 @@
 #include <linux/slab.h>
 #include <linux/pagemap.h>
 #include <linux/smp_lock.h>
+#include <asm/page.h>
 
 #include "rock.h"
 
@@ -419,7 +420,7 @@
   return 0;
 }
 
-static char *get_symlink_chunk(char *rpnt, struct rock_ridge *rr)
+static char *get_symlink_chunk(char *rpnt, struct rock_ridge *rr, char *plimit)
 {
 	int slen;
 	int rootflag;
@@ -431,16 +432,25 @@
 		rootflag = 0;
 		switch (slp->flags & ~1) {
 		case 0:
+			if (slp->len > plimit - rpnt)
+				return NULL;
 			memcpy(rpnt, slp->text, slp->len);
 			rpnt+=slp->len;
 			break;
+		case 2:
+			if (rpnt >= plimit)
+				return NULL;
+			*rpnt++='.';
+			break;
 		case 4:
+			if (2 > plimit - rpnt)
+				return NULL;
 			*rpnt++='.';
-			/* fallthru */
-		case 2:
 			*rpnt++='.';
 			break;
 		case 8:
+			if (rpnt >= plimit)
+				return NULL;
 			rootflag = 1;
 			*rpnt++='/';
 			break;
@@ -457,17 +467,23 @@
 			 * If there is another SL record, and this component
 			 * record isn't continued, then add a slash.
 			 */
-			if ((!rootflag) && (rr->u.SL.flags & 1) && !(oldslp->flags & 1))
+			if ((!rootflag) && (rr->u.SL.flags & 1) &&
+			    !(oldslp->flags & 1)) {
+				if (rpnt >= plimit)
+					return NULL;
 				*rpnt++='/';
+			}
 			break;
 		}
 
 		/*
 		 * If this component record isn't continued, then append a '/'.
 		 */
-		if (!rootflag && !(oldslp->flags & 1))
+		if (!rootflag && !(oldslp->flags & 1)) {
+			if (rpnt >= plimit)
+				return NULL;
 			*rpnt++='/';
-
+		}
 	}
 	return rpnt;
 }
@@ -548,7 +564,10 @@
 			CHECK_SP(goto out);
 			break;
 		case SIG('S', 'L'):
-			rpnt = get_symlink_chunk(rpnt, rr);
+			rpnt = get_symlink_chunk(rpnt, rr,
+						 link + (PAGE_SIZE - 1));
+			if (rpnt == NULL)
+				goto out;
 			break;
 		case SIG('C', 'E'):
 			/* This tells is if there is a continuation record */
diff -urN linux-2.4.26-rc3/kernel/fork.c linux-2.4.26-rc4/kernel/fork.c
--- linux-2.4.26-rc3/kernel/fork.c	2004-02-18 05:36:32.000000000 -0800
+++ linux-2.4.26-rc4/kernel/fork.c	2004-04-14 05:52:00.000000000 -0700
@@ -826,6 +826,8 @@
 	exit_namespace(p);
 bad_fork_cleanup_mm:
 	exit_mm(p);
+	if (p->active_mm)
+		mmdrop(p->active_mm);
 bad_fork_cleanup_sighand:
 	exit_sighand(p);
 bad_fork_cleanup_fs:
