summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Yamin <plasmaroo@gentoo.org>2004-04-15 12:21:47 +0000
committerTim Yamin <plasmaroo@gentoo.org>2004-04-15 12:21:47 +0000
commit58aa02714521bc3f213e57a3f5988d70303cb2e9 (patch)
tree1f062bb1ecd009e64a7b754e5cabf2978913d4be /sys-kernel/ppc64-sources/files
parentMarked stable on mips. (Manifest recommit) (diff)
downloadgentoo-2-58aa02714521bc3f213e57a3f5988d70303cb2e9.tar.gz
gentoo-2-58aa02714521bc3f213e57a3f5988d70303cb2e9.tar.bz2
gentoo-2-58aa02714521bc3f213e57a3f5988d70303cb2e9.zip
Version bump for the CAN-2004-0109 issue; bug #47881.
Diffstat (limited to 'sys-kernel/ppc64-sources/files')
-rw-r--r--sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4-r1 (renamed from sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4)0
-rw-r--r--sys-kernel/ppc64-sources/files/ppc64-sources-2.6.4.CAN-2004-0109.patch88
2 files changed, 88 insertions, 0 deletions
diff --git a/sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4 b/sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4-r1
index 9a1cbf61362b..9a1cbf61362b 100644
--- a/sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4
+++ b/sys-kernel/ppc64-sources/files/digest-ppc64-sources-2.6.4-r1
diff --git a/sys-kernel/ppc64-sources/files/ppc64-sources-2.6.4.CAN-2004-0109.patch b/sys-kernel/ppc64-sources/files/ppc64-sources-2.6.4.CAN-2004-0109.patch
new file mode 100644
index 000000000000..d7726c2e5aaf
--- /dev/null
+++ b/sys-kernel/ppc64-sources/files/ppc64-sources-2.6.4.CAN-2004-0109.patch
@@ -0,0 +1,88 @@
+--- linux/fs/isofs/rock.c.orig
++++ linux/fs/isofs/rock.c
+@@ -14,6 +14,7 @@
+ #include <linux/slab.h>
+ #include <linux/pagemap.h>
+ #include <linux/smp_lock.h>
+ #include <linux/buffer_head.h>
++#include <asm/page.h>
+
+ #include "rock.h"
+@@ -419,7 +420,7 @@ int parse_rock_ridge_inode_internal(stru
+ 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 @@ static char *get_symlink_chunk(char *rpn
+ 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 @@ static char *get_symlink_chunk(char *rpn
+ * 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 @@ static int rock_ridge_symlink_readpage(s
+ 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 */
+
+