summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Yamin <plasmaroo@gentoo.org>2004-11-20 11:12:53 +0000
committerTim Yamin <plasmaroo@gentoo.org>2004-11-20 11:12:53 +0000
commit3eccde02d3e194ca779c86b6afccde54c3ba6da4 (patch)
tree529f62bd9d16f1ccebd6f81bb51fb72c38ba9ba8 /sys-kernel
parentFixing digest to include all files. (Manifest recommit) (diff)
downloadgentoo-2-3eccde02d3e194ca779c86b6afccde54c3ba6da4.tar.gz
gentoo-2-3eccde02d3e194ca779c86b6afccde54c3ba6da4.tar.bz2
gentoo-2-3eccde02d3e194ca779c86b6afccde54c3ba6da4.zip
Version bump; updates binfmt_elf patch (bug #70681) and adds the smbfs security patch (bug #65877).
Diffstat (limited to 'sys-kernel')
-rw-r--r--sys-kernel/win4lin-sources/ChangeLog17
-rw-r--r--sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r9 (renamed from sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r8)0
-rw-r--r--sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r9 (renamed from sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r8)0
-rw-r--r--sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9-r1 (renamed from sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9)0
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.binfmt_elf.patch33
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.smbfs.patch97
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.6.7.smbfs.patch93
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.binfmt_elf.patch25
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.smbfs.patch72
-rw-r--r--sys-kernel/win4lin-sources/files/win4lin-sources-2.6.binfmt_elf.patch31
-rw-r--r--sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r9.ebuild (renamed from sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r8.ebuild)3
-rw-r--r--sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r9.ebuild (renamed from sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r8.ebuild)5
-rw-r--r--sys-kernel/win4lin-sources/win4lin-sources-2.6.9-r1.ebuild (renamed from sys-kernel/win4lin-sources/win4lin-sources-2.6.9.ebuild)5
13 files changed, 350 insertions, 31 deletions
diff --git a/sys-kernel/win4lin-sources/ChangeLog b/sys-kernel/win4lin-sources/ChangeLog
index 6b91e91d6bf4..906e660bb0ca 100644
--- a/sys-kernel/win4lin-sources/ChangeLog
+++ b/sys-kernel/win4lin-sources/ChangeLog
@@ -1,6 +1,21 @@
# ChangeLog for sys-kernel/win4lin-sources
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/ChangeLog,v 1.41 2004/11/15 18:07:41 genstef Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/ChangeLog,v 1.42 2004/11/20 11:12:53 plasmaroo Exp $
+
+*win4lin-sources-2.6.9-r1 (20 Nov 2004)
+
+ 20 Nov 2004; <plasmaroo@gentoo.org> -win4lin-sources-2.4.26-r8.ebuild,
+ +win4lin-sources-2.4.26-r9.ebuild, -win4lin-sources-2.6.7-r8.ebuild,
+ +win4lin-sources-2.6.7-r9.ebuild, +win4lin-sources-2.6.9-r1.ebuild,
+ -win4lin-sources-2.6.9.ebuild,
+ files/win4lin-sources-2.4.26.binfmt_elf.patch,
+ +files/win4lin-sources-2.4.26.smbfs.patch,
+ +files/win4lin-sources-2.6.7.smbfs.patch,
+ files/win4lin-sources-2.6.9.binfmt_elf.patch,
+ +files/win4lin-sources-2.6.9.smbfs.patch,
+ files/win4lin-sources-2.6.binfmt_elf.patch:
+ Version bump; updates binfmt_elf patch (bug #70681) and adds the smbfs
+ security patch (bug #65877).
*win4lin-sources-2.6.9 (15 Nov 2004)
diff --git a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r8 b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r9
index 0299063fed16..0299063fed16 100644
--- a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r8
+++ b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.4.26-r9
diff --git a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r8 b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r9
index 9e871718355b..9e871718355b 100644
--- a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r8
+++ b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.7-r9
diff --git a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9 b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9-r1
index 12075686996a..12075686996a 100644
--- a/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9
+++ b/sys-kernel/win4lin-sources/files/digest-win4lin-sources-2.6.9-r1
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.binfmt_elf.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.binfmt_elf.patch
index 534e4c064a52..9f4f44ee78f5 100644
--- a/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.binfmt_elf.patch
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.binfmt_elf.patch
@@ -1,6 +1,7 @@
---- linux-2.4.27/fs/binfmt_elf.c 2004-11-10 12:25:16 -08:00
-+++ linux-2.4.27-plasmaroo/fs/binfmt_elf.c 2004-11-10 12:25:16 -08:00
-@@ -335,9 +335,12 @@
+diff -ur linux-2.4.27/fs/binfmt_elf.c linux-2.4.27.plasmaroo/fs/binfmt_elf.c
+--- linux-2.4.27/fs/binfmt_elf.c 2004-04-14 14:05:40.000000000 +0100
++++ linux-2.4.27.plasmaroo/fs/binfmt_elf.c 2004-11-19 21:30:26.745410824 +0000
+@@ -299,9 +299,12 @@
goto out;
retval = kernel_read(interpreter,interp_elf_ex->e_phoff,(char *)elf_phdata,size);
@@ -15,7 +16,7 @@
eppnt = elf_phdata;
for (i=0; i<interp_elf_ex->e_phnum; i++, eppnt++) {
-@@ -532,8 +535,11 @@
+@@ -475,8 +478,11 @@
goto out;
retval = kernel_read(bprm->file, elf_ex.e_phoff, (char *) elf_phdata, size);
@@ -28,7 +29,17 @@
files = current->files; /* Refcounted so ok */
retval = unshare_files();
-@@ -580,8 +586,14 @@
+@@ -513,7 +519,8 @@
+ */
+
+ retval = -ENOMEM;
+- if (elf_ppnt->p_filesz > PATH_MAX)
++ if (elf_ppnt->p_filesz > PATH_MAX ||
++ elf_ppnt->p_filesz == 0)
+ goto out_free_file;
+ elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz,
+ GFP_KERNEL);
+@@ -523,8 +530,16 @@
retval = kernel_read(bprm->file, elf_ppnt->p_offset,
elf_interpreter,
elf_ppnt->p_filesz);
@@ -36,15 +47,17 @@
+ if (retval != elf_ppnt->p_filesz) {
+ if (retval >= 0)
+ retval = -EIO;
- goto out_free_interp;
++ goto out_free_interp;
+ }
+ /* make sure path is NULL terminated */
-+ elf_interpreter[elf_ppnt->p_filesz - 1] = '\0';
++ retval = -EINVAL;
++ if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0')
+ goto out_free_interp;
+
/* If the program interpreter is one of these two,
* then assume an iBCS2 image. Otherwise assume
* a native linux image.
-@@ -616,8 +628,11 @@
+@@ -543,8 +558,11 @@
if (IS_ERR(interpreter))
goto out_free_interp;
retval = kernel_read(interpreter, 0, bprm->buf, BINPRM_BUF_SIZE);
@@ -56,8 +69,8 @@
+ }
/* Get the exec headers */
- loc->interp_ex = *((struct exec *) bprm->buf);
-@@ -776,8 +791,10 @@
+ interp_ex = *((struct exec *) bprm->buf);
+@@ -682,8 +700,10 @@
}
error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.smbfs.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.smbfs.patch
new file mode 100644
index 000000000000..63c5ba30403f
--- /dev/null
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.4.26.smbfs.patch
@@ -0,0 +1,97 @@
+diff -ur linux-2.4.27/fs/smbfs/proc.c linux-2.4.28/fs/smbfs/proc.c
+--- linux-2.4.27/fs/smbfs/proc.c 2004-11-12 19:32:24.000000000 +0000
++++ linux-2.4.28/fs/smbfs/proc.c 2004-11-19 20:18:27.000000000 +0000
+@@ -1289,10 +1289,12 @@
+ data_len = WVAL(buf, 1);
+
+ /* we can NOT simply trust the data_len given by the server ... */
+- if (data_len > server->packet_size - (buf+3 - server->packet)) {
+- printk(KERN_ERR "smb_proc_read: invalid data length!! "
+- "%d > %d - (%p - %p)\n",
+- data_len, server->packet_size, buf+3, server->packet);
++ if (data_len > count ||
++ (buf+3 - server->packet) + data_len > server->packet_size) {
++ printk(KERN_ERR "smb_proc_read: invalid data length/offset!! "
++ "%d > %d || (%p - %p) + %d > %d\n",
++ data_len, count,
++ buf+3, server->packet, data_len, server->packet_size);
+ result = -EIO;
+ goto out;
+ }
+@@ -1378,10 +1380,12 @@
+ buf = smb_base(server->packet) + data_off;
+
+ /* we can NOT simply trust the info given by the server ... */
+- if (data_len > server->packet_size - (buf - server->packet)) {
+- printk(KERN_ERR "smb_proc_read: invalid data length!! "
+- "%d > %d - (%p - %p)\n",
+- data_len, server->packet_size, buf, server->packet);
++ if (data_len > count ||
++ (buf - server->packet) + data_len > server->packet_size) {
++ printk(KERN_ERR "smb_proc_readX: invalid data length/offset!! "
++ "%d > %d || (%p - %p) + %d > %d\n",
++ data_len, count,
++ buf, server->packet, data_len, server->packet_size);
+ result = -EIO;
+ goto out;
+ }
+diff -ur linux-2.4.27/fs/smbfs/sock.c linux-2.4.28/fs/smbfs/sock.c
+--- linux-2.4.27/fs/smbfs/sock.c 2004-11-12 19:32:24.000000000 +0000
++++ linux-2.4.28/fs/smbfs/sock.c 2004-11-19 20:18:27.000000000 +0000
+@@ -571,7 +571,11 @@
+ parm_disp, parm_offset, parm_count,
+ data_disp, data_offset, data_count);
+ *parm = base + parm_offset;
++ if (*parm - inbuf + parm_tot > server->packet_size)
++ goto out_bad_parm;
+ *data = base + data_offset;
++ if (*data - inbuf + data_tot > server->packet_size)
++ goto out_bad_data;
+ goto success;
+ }
+
+@@ -591,6 +595,8 @@
+ rcv_buf = smb_vmalloc(buf_len);
+ if (!rcv_buf)
+ goto out_no_mem;
++ memset(rcv_buf, 0, buf_len);
++
+ *parm = rcv_buf;
+ *data = rcv_buf + total_p;
+ } else if (data_tot > total_d || parm_tot > total_p)
+@@ -598,8 +604,12 @@
+
+ if (parm_disp + parm_count > total_p)
+ goto out_bad_parm;
++ if (parm_offset + parm_count > server->packet_size)
++ goto out_bad_parm;
+ if (data_disp + data_count > total_d)
+ goto out_bad_data;
++ if (data_offset + data_count > server->packet_size)
++ goto out_bad_data;
+ memcpy(*parm + parm_disp, base + parm_offset, parm_count);
+ memcpy(*data + data_disp, base + data_offset, data_count);
+
+@@ -610,8 +620,11 @@
+ * Check whether we've received all of the data. Note that
+ * we use the packet totals -- total lengths might shrink!
+ */
+- if (data_len >= data_tot && parm_len >= parm_tot)
++ if (data_len >= data_tot && parm_len >= parm_tot) {
++ data_len = data_tot;
++ parm_len = parm_tot;
+ break;
++ }
+ }
+
+ /*
+@@ -625,6 +638,9 @@
+ server->packet = rcv_buf;
+ rcv_buf = inbuf;
+ } else {
++ if (parm_len + data_len > buf_len)
++ goto out_data_grew;
++
+ PARANOIA("copying data, old size=%d, new size=%u\n",
+ server->packet_size, buf_len);
+ memcpy(inbuf, rcv_buf, parm_len + data_len);
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.7.smbfs.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.7.smbfs.patch
new file mode 100644
index 000000000000..99401cf93a0e
--- /dev/null
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.7.smbfs.patch
@@ -0,0 +1,93 @@
+diff -urN linux-2.6.8.1/fs/smbfs/proc.c linux-2.6.8.1.plasmaroo/fs/smbfs/proc.c
+--- linux-2.6.8.1/fs/smbfs/proc.c 2004-08-24 17:15:57.000000000 +1000
++++ linux-2.6.8.1.plasmaroo/fs/smbfs/proc.c 2004-11-06 11:27:20.000000000 +1100
+@@ -1427,9 +1427,9 @@
+ * So we must first calculate the amount of padding used by the server.
+ */
+ data_off -= hdrlen;
+- if (data_off > SMB_READX_MAX_PAD) {
+- PARANOIA("offset is larger than max pad!\n");
+- PARANOIA("%d > %d\n", data_off, SMB_READX_MAX_PAD);
++ if (data_off > SMB_READX_MAX_PAD || data_off < 0) {
++ PARANOIA("offset is larger than SMB_READX_MAX_PAD or negative!\n");
++ PARANOIA("%d > %d || %d < 0\n", data_off, SMB_READX_MAX_PAD, data_off);
+ req->rq_rlen = req->rq_bufsize + 1;
+ return;
+ }
+diff -urN linux-2.6.8.1/fs/smbfs/request.c linux-2.6.8.1.plasmaroo/fs/smbfs/request.c
+--- linux-2.6.8.1/fs/smbfs/request.c 2004-11-06 11:27:51.000000000 +1100
++++ linux-2.6.8.1.plasmaroo/fs/smbfs/request.c 2004-11-06 11:27:20.000000000 +1100
+@@ -588,6 +588,10 @@
+ data_count = WVAL(inbuf, smb_drcnt);
+
+ /* Modify offset for the split header/buffer we use */
++ if (data_offset < hdrlen)
++ goto out_bad_data;
++ if (parm_offset < hdrlen)
++ goto out_bad_parm;
+ data_offset -= hdrlen;
+ parm_offset -= hdrlen;
+
+@@ -607,6 +611,10 @@
+ req->rq_lparm = parm_count;
+ req->rq_data = req->rq_buffer + data_offset;
+ req->rq_parm = req->rq_buffer + parm_offset;
++ if (parm_offset + parm_count > req->rq_rlen)
++ goto out_bad_parm;
++ if (data_offset + data_count > req->rq_rlen)
++ goto out_bad_data;
+ return 0;
+ }
+
+@@ -634,6 +642,7 @@
+ req->rq_trans2buffer = smb_kmalloc(buf_len, GFP_NOFS);
+ if (!req->rq_trans2buffer)
+ goto out_no_mem;
++ memset(req->rq_trans2buffer, 0, buf_len);
+
+ req->rq_parm = req->rq_trans2buffer;
+ req->rq_data = req->rq_trans2buffer + parm_tot;
+@@ -643,8 +652,12 @@
+
+ if (parm_disp + parm_count > req->rq_total_parm)
+ goto out_bad_parm;
++ if (parm_offset + parm_count > req->rq_rlen)
++ goto out_bad_parm;
+ if (data_disp + data_count > req->rq_total_data)
+ goto out_bad_data;
++ if (data_offset + data_count > req->rq_rlen)
++ goto out_bad_data;
+
+ inbuf = req->rq_buffer;
+ memcpy(req->rq_parm + parm_disp, inbuf + parm_offset, parm_count);
+@@ -657,8 +670,11 @@
+ * Check whether we've received all of the data. Note that
+ * we use the packet totals -- total lengths might shrink!
+ */
+- if (req->rq_ldata >= data_tot && req->rq_lparm >= parm_tot)
++ if (req->rq_ldata >= data_tot && req->rq_lparm >= parm_tot) {
++ req->rq_ldata = data_tot;
++ req->rq_lparm = parm_tot;
+ return 0;
++ }
+ return 1;
+
+ out_too_long:
+@@ -676,13 +692,13 @@
+ req->rq_errno = -EIO;
+ goto out;
+ out_bad_parm:
+- printk(KERN_ERR "smb_trans2: invalid parms, disp=%d, cnt=%d, tot=%d\n",
+- parm_disp, parm_count, parm_tot);
++ printk(KERN_ERR "smb_trans2: invalid parms, disp=%d, cnt=%d, tot=%d, ofs=%d\n",
++ parm_disp, parm_count, parm_tot, parm_offset);
+ req->rq_errno = -EIO;
+ goto out;
+ out_bad_data:
+- printk(KERN_ERR "smb_trans2: invalid data, disp=%d, cnt=%d, tot=%d\n",
+- data_disp, data_count, data_tot);
++ printk(KERN_ERR "smb_trans2: invalid data, disp=%d, cnt=%d, tot=%d, ofs=%d\n",
++ data_disp, data_count, data_tot, data_offset);
+ req->rq_errno = -EIO;
+ out:
+ return req->rq_errno;
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.binfmt_elf.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.binfmt_elf.patch
index c4cc8a82d3fb..a836201deca1 100644
--- a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.binfmt_elf.patch
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.binfmt_elf.patch
@@ -1,5 +1,6 @@
---- linux-2.6.9/fs/binfmt_elf.c 2004-11-10 12:25:16 -08:00
-+++ linux-2.6.9-plasmaroo/fs/binfmt_elf.c 2004-11-10 12:25:16 -08:00
+diff -ur linux-2.6.9/fs/binfmt_elf.c linux-2.6.9.plasmaroo/fs/binfmt_elf.c
+--- linux-2.6.9/fs/binfmt_elf.c 2004-10-24 14:58:48.000000000 +0100
++++ linux-2.6.9.plasmaroo/fs/binfmt_elf.c 2004-11-19 20:11:36.000000000 +0000
@@ -335,9 +335,12 @@
goto out;
@@ -28,7 +29,17 @@
files = current->files; /* Refcounted so ok */
retval = unshare_files();
-@@ -580,8 +586,14 @@
+@@ -570,7 +576,8 @@
+ */
+
+ retval = -ENOMEM;
+- if (elf_ppnt->p_filesz > PATH_MAX)
++ if (elf_ppnt->p_filesz > PATH_MAX ||
++ elf_ppnt->p_filesz == 0)
+ goto out_free_file;
+ elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz,
+ GFP_KERNEL);
+@@ -580,8 +587,16 @@
retval = kernel_read(bprm->file, elf_ppnt->p_offset,
elf_interpreter,
elf_ppnt->p_filesz);
@@ -39,12 +50,14 @@
goto out_free_interp;
+ }
+ /* make sure path is NULL terminated */
-+ elf_interpreter[elf_ppnt->p_filesz - 1] = '\0';
++ retval = -EINVAL;
++ if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0')
++ goto out_free_interp;
+
/* If the program interpreter is one of these two,
* then assume an iBCS2 image. Otherwise assume
* a native linux image.
-@@ -616,8 +628,11 @@
+@@ -616,8 +631,11 @@
if (IS_ERR(interpreter))
goto out_free_interp;
retval = kernel_read(interpreter, 0, bprm->buf, BINPRM_BUF_SIZE);
@@ -57,7 +70,7 @@
/* Get the exec headers */
loc->interp_ex = *((struct exec *) bprm->buf);
-@@ -776,8 +791,10 @@
+@@ -776,8 +794,10 @@
}
error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.smbfs.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.smbfs.patch
new file mode 100644
index 000000000000..f10cfedfab16
--- /dev/null
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.9.smbfs.patch
@@ -0,0 +1,72 @@
+diff -urN linux-2.6.8.1/fs/smbfs/proc.c linux-2.6.8.1.plasmaroo/fs/smbfs/proc.c
+--- linux-2.6.8.1/fs/smbfs/proc.c 2004-08-24 17:15:57.000000000 +1000
++++ linux-2.6.8.1.plasmaroo/fs/smbfs/proc.c 2004-11-06 11:27:20.000000000 +1100
+@@ -1427,9 +1427,9 @@
+ * So we must first calculate the amount of padding used by the server.
+ */
+ data_off -= hdrlen;
+- if (data_off > SMB_READX_MAX_PAD) {
+- PARANOIA("offset is larger than max pad!\n");
+- PARANOIA("%d > %d\n", data_off, SMB_READX_MAX_PAD);
++ if (data_off > SMB_READX_MAX_PAD || data_off < 0) {
++ PARANOIA("offset is larger than SMB_READX_MAX_PAD or negative!\n");
++ PARANOIA("%d > %d || %d < 0\n", data_off, SMB_READX_MAX_PAD, data_off);
+ req->rq_rlen = req->rq_bufsize + 1;
+ return;
+ }
+diff -urN linux-2.6.8.1/fs/smbfs/request.c linux-2.6.8.1.plasmaroo/fs/smbfs/request.c
+--- linux-2.6.8.1/fs/smbfs/request.c 2004-11-06 11:27:51.000000000 +1100
++++ linux-2.6.8.1.plasmaroo/fs/smbfs/request.c 2004-11-06 11:27:20.000000000 +1100
+@@ -588,6 +588,10 @@
+ data_count = WVAL(inbuf, smb_drcnt);
+
+ /* Modify offset for the split header/buffer we use */
++ if (data_offset < hdrlen)
++ goto out_bad_data;
++ if (parm_offset < hdrlen)
++ goto out_bad_parm;
+ data_offset -= hdrlen;
+ parm_offset -= hdrlen;
+
+@@ -607,6 +611,10 @@
+ req->rq_lparm = parm_count;
+ req->rq_data = req->rq_buffer + data_offset;
+ req->rq_parm = req->rq_buffer + parm_offset;
++ if (parm_offset + parm_count > req->rq_rlen)
++ goto out_bad_parm;
++ if (data_offset + data_count > req->rq_rlen)
++ goto out_bad_data;
+ return 0;
+ }
+
+@@ -643,8 +652,12 @@
+
+ if (parm_disp + parm_count > req->rq_total_parm)
+ goto out_bad_parm;
++ if (parm_offset + parm_count > req->rq_rlen)
++ goto out_bad_parm;
+ if (data_disp + data_count > req->rq_total_data)
+ goto out_bad_data;
++ if (data_offset + data_count > req->rq_rlen)
++ goto out_bad_data;
+
+ inbuf = req->rq_buffer;
+ memcpy(req->rq_parm + parm_disp, inbuf + parm_offset, parm_count);
+@@ -676,13 +692,13 @@
+ req->rq_errno = -EIO;
+ goto out;
+ out_bad_parm:
+- printk(KERN_ERR "smb_trans2: invalid parms, disp=%d, cnt=%d, tot=%d\n",
+- parm_disp, parm_count, parm_tot);
++ printk(KERN_ERR "smb_trans2: invalid parms, disp=%d, cnt=%d, tot=%d, ofs=%d\n",
++ parm_disp, parm_count, parm_tot, parm_offset);
+ req->rq_errno = -EIO;
+ goto out;
+ out_bad_data:
+- printk(KERN_ERR "smb_trans2: invalid data, disp=%d, cnt=%d, tot=%d\n",
+- data_disp, data_count, data_tot);
++ printk(KERN_ERR "smb_trans2: invalid data, disp=%d, cnt=%d, tot=%d, ofs=%d\n",
++ data_disp, data_count, data_tot, data_offset);
+ req->rq_errno = -EIO;
+ out:
+ return req->rq_errno;
diff --git a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.binfmt_elf.patch b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.binfmt_elf.patch
index 9ca23675f25d..87d05e7b5fa4 100644
--- a/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.binfmt_elf.patch
+++ b/sys-kernel/win4lin-sources/files/win4lin-sources-2.6.binfmt_elf.patch
@@ -1,6 +1,7 @@
---- linux-2.6.7-uc0-r8/fs/binfmt_elf.c 2004-11-12 11:50:08 -08:00
-+++ linux-2.6.7-uc0-r8-plasmaroo/fs/binfmt_elf.c 2004-11-12 11:50:08 -08:00
-@@ -335,9 +335,12 @@
+diff -ur linux-2.6.8.1/fs/binfmt_elf.c linux-2.6.8.1.plasmaroo/fs/binfmt_elf.c
+--- linux-2.6.8.1/fs/binfmt_elf.c 2004-08-14 11:55:23.000000000 +0100
++++ linux-2.6.8.1.plasmaroo/fs/binfmt_elf.c 2004-11-19 23:07:08.375429000 +0000
+@@ -334,9 +334,12 @@
goto out;
retval = kernel_read(interpreter,interp_elf_ex->e_phoff,(char *)elf_phdata,size);
@@ -15,7 +16,7 @@
eppnt = elf_phdata;
for (i=0; i<interp_elf_ex->e_phnum; i++, eppnt++) {
-@@ -532,8 +535,11 @@
+@@ -523,8 +526,11 @@
goto out;
retval = kernel_read(bprm->file, elf_ex.e_phoff, (char *) elf_phdata, size);
@@ -28,7 +29,17 @@
files = current->files; /* Refcounted so ok */
retval = unshare_files();
-@@ -580,8 +586,14 @@
+@@ -561,7 +567,8 @@
+ */
+
+ retval = -ENOMEM;
+- if (elf_ppnt->p_filesz > PATH_MAX)
++ if (elf_ppnt->p_filesz > PATH_MAX ||
++ elf_ppnt->p_filesz == 0)
+ goto out_free_file;
+ elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz,
+ GFP_KERNEL);
+@@ -571,8 +578,16 @@
retval = kernel_read(bprm->file, elf_ppnt->p_offset,
elf_interpreter,
elf_ppnt->p_filesz);
@@ -39,12 +50,14 @@
goto out_free_interp;
+ }
+ /* make sure path is NULL terminated */
-+ elf_interpreter[elf_ppnt->p_filesz - 1] = '\0';
++ retval = -EINVAL;
++ if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0')
++ goto out_free_interp;
+
/* If the program interpreter is one of these two,
* then assume an iBCS2 image. Otherwise assume
* a native linux image.
-@@ -616,8 +628,11 @@
+@@ -607,8 +622,11 @@
if (IS_ERR(interpreter))
goto out_free_interp;
retval = kernel_read(interpreter, 0, bprm->buf, BINPRM_BUF_SIZE);
@@ -56,8 +69,8 @@
+ }
/* Get the exec headers */
- loc->interp_ex = *((struct exec *) bprm->buf);
-@@ -776,8 +791,10 @@
+ interp_ex = *((struct exec *) bprm->buf);
+@@ -765,8 +783,10 @@
}
error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
diff --git a/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r8.ebuild b/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r9.ebuild
index 0c8843472b02..3f0735b0f652 100644
--- a/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r8.ebuild
+++ b/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r9.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r8.ebuild,v 1.1 2004/11/12 20:30:32 plasmaroo Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.4.26-r9.ebuild,v 1.1 2004/11/20 11:12:53 plasmaroo Exp $
# OKV=original kernel version, KV=patched kernel version. They can be the same.
@@ -43,6 +43,7 @@ src_unpack() {
epatch ${FILESDIR}/${P}.cmdlineLeak.patch || die "Failed to apply the /proc/cmdline patch!"
epatch ${FILESDIR}/${P}.XDRWrapFix.patch || die "Failed to apply the kNFSd XDR patch!"
epatch ${FILESDIR}/${P}.binfmt_elf.patch || die "Failed to apply the binfmt_elf patch!"
+ epatch ${FILESDIR}/${P}.smbfs.patch || die "Failed to apply the SMBFS patch!"
kernel_universal_unpack
}
diff --git a/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r8.ebuild b/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r9.ebuild
index dd07e00a400c..5ae437c455b9 100644
--- a/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r8.ebuild
+++ b/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r9.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r8.ebuild,v 1.1 2004/11/12 20:30:32 plasmaroo Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.6.7-r9.ebuild,v 1.1 2004/11/20 11:12:53 plasmaroo Exp $
ETYPE="sources"
inherit kernel-2
@@ -19,7 +19,8 @@ UNIPATCH_LIST="
${FILESDIR}/${PN}-2.6.cmdlineLeak.patch
${FILESDIR}/${PN}-2.6.CAN-2004-0816.patch
${FILESDIR}/${PN}-2.6.devPtmx.patch
- ${FILESDIR}/${PN}-2.6.binfmt_elf.patch"
+ ${FILESDIR}/${PN}-2.6.binfmt_elf.patch
+ ${FILESDIR}/${P}.smbfs.patch"
S=${WORKDIR}/linux-${KV}
diff --git a/sys-kernel/win4lin-sources/win4lin-sources-2.6.9.ebuild b/sys-kernel/win4lin-sources/win4lin-sources-2.6.9-r1.ebuild
index 447d2b5187fb..12342f7d38d2 100644
--- a/sys-kernel/win4lin-sources/win4lin-sources-2.6.9.ebuild
+++ b/sys-kernel/win4lin-sources/win4lin-sources-2.6.9-r1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.6.9.ebuild,v 1.1 2004/11/15 18:07:41 genstef Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-kernel/win4lin-sources/win4lin-sources-2.6.9-r1.ebuild,v 1.1 2004/11/20 11:12:53 plasmaroo Exp $
ETYPE="sources"
inherit kernel-2
@@ -10,7 +10,8 @@ MKI_VERSION='1_3_8'
UNIPATCH_LIST="
${DISTDIR}/Kernel-Win4Lin3-${OKV}.patch
${DISTDIR}/mki-adapter26_${MKI_VERSION}.patch:1
- ${FILESDIR}/${PN}-2.6.9.binfmt_elf.patch"
+ ${FILESDIR}/${PN}-2.6.9.binfmt_elf.patch
+ ${FILESDIR}/${P}.smbfs.patch"
S=${WORKDIR}/linux-${KV}