diff options
author | Tim Yamin <plasmaroo@gentoo.org> | 2004-11-20 11:12:53 +0000 |
---|---|---|
committer | Tim Yamin <plasmaroo@gentoo.org> | 2004-11-20 11:12:53 +0000 |
commit | 3eccde02d3e194ca779c86b6afccde54c3ba6da4 (patch) | |
tree | 529f62bd9d16f1ccebd6f81bb51fb72c38ba9ba8 /sys-kernel | |
parent | Fixing digest to include all files. (Manifest recommit) (diff) | |
download | gentoo-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')
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} |