Bugzilla – Attachment 21757 Details for
Bug 56074
VUL-0: CVE-2004-0415: kernel: /proc info leak
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
from Solar designer via vendor-sec.
linux-2.4.26-ppos-dirty-hackaround.diff (text/plain), 4.06 KB, created by
Roman Drahtmueller
on 2004-06-29 05:30:50 UTC
(
hide
)
Description:
from Solar designer via vendor-sec.
Filename:
MIME Type:
Creator:
Roman Drahtmueller
Created:
2004-06-29 05:30:50 UTC
Size:
4.06 KB
patch
obsolete
>diff -urX nopatch linux-2.4.26-ow2/Makefile linux/Makefile >--- linux-2.4.26-ow2/Makefile Sat Jun 19 03:55:22 2004 >+++ linux/Makefile Mon Jun 28 18:40:50 2004 >@@ -1,7 +1,7 @@ > VERSION = 2 > PATCHLEVEL = 4 > SUBLEVEL = 26 >-EXTRAVERSION = -ow2 >+EXTRAVERSION = -ow3pre1 > > KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) > >diff -urX nopatch linux-2.4.26-ow2/fs/file_table.c linux/fs/file_table.c >--- linux-2.4.26-ow2/fs/file_table.c Thu Nov 28 23:53:15 2002 >+++ linux/fs/file_table.c Mon Jun 28 19:20:13 2004 >@@ -43,6 +43,7 @@ > new_one: > memset(f, 0, sizeof(*f)); > atomic_set(&f->f_count,1); >+ init_MUTEX(&f->f_pos_lock); > f->f_version = ++event; > f->f_uid = current->fsuid; > f->f_gid = current->fsgid; >@@ -87,6 +88,7 @@ > memset(filp, 0, sizeof(*filp)); > filp->f_mode = mode; > atomic_set(&filp->f_count, 1); >+ init_MUTEX(&filp->f_pos_lock); > filp->f_dentry = dentry; > filp->f_uid = current->fsuid; > filp->f_gid = current->fsgid; >diff -urX nopatch linux-2.4.26-ow2/fs/nfsd/vfs.c linux/fs/nfsd/vfs.c >--- linux-2.4.26-ow2/fs/nfsd/vfs.c Fri Nov 28 18:26:21 2003 >+++ linux/fs/nfsd/vfs.c Mon Jun 28 19:19:35 2004 >@@ -464,6 +464,7 @@ > memset(filp, 0, sizeof(*filp)); > filp->f_op = fops_get(inode->i_fop); > atomic_set(&filp->f_count, 1); >+ init_MUTEX(&filp->f_pos_lock); > filp->f_dentry = dentry; > filp->f_vfsmnt = fhp->fh_export->ex_mnt; > if (access & MAY_WRITE) { >diff -urX nopatch linux-2.4.26-ow2/fs/read_write.c linux/fs/read_write.c >--- linux-2.4.26-ow2/fs/read_write.c Mon Aug 25 11:44:43 2003 >+++ linux/fs/read_write.c Mon Jun 28 19:37:08 2004 >@@ -100,7 +100,9 @@ > if (file->f_op && file->f_op->llseek) > fn = file->f_op->llseek; > lock_kernel(); >+ down(&file->f_pos_lock); > retval = fn(file, offset, origin); >+ up(&file->f_pos_lock); > unlock_kernel(); > return retval; > } >@@ -173,8 +175,11 @@ > if (!ret) { > ssize_t (*read)(struct file *, char *, size_t, loff_t *); > ret = -EINVAL; >- if (file->f_op && (read = file->f_op->read) != NULL) >+ if (file->f_op && (read = file->f_op->read) != NULL) { >+ down(&file->f_pos_lock); > ret = read(file, buf, count, &file->f_pos); >+ up(&file->f_pos_lock); >+ } > } > } > if (ret > 0) >@@ -199,8 +204,11 @@ > if (!ret) { > ssize_t (*write)(struct file *, const char *, size_t, loff_t *); > ret = -EINVAL; >- if (file->f_op && (write = file->f_op->write) != NULL) >+ if (file->f_op && (write = file->f_op->write) != NULL) { >+ down(&file->f_pos_lock); > ret = write(file, buf, count, &file->f_pos); >+ up(&file->f_pos_lock); >+ } > } > } > if (ret > 0) >@@ -338,8 +346,11 @@ > if (!file) > goto bad_file; > if (file->f_op && (file->f_mode & FMODE_READ) && >- (file->f_op->readv || file->f_op->read)) >+ (file->f_op->readv || file->f_op->read)) { >+ down(&file->f_pos_lock); > ret = do_readv_writev(VERIFY_WRITE, file, vector, count); >+ up(&file->f_pos_lock); >+ } > fput(file); > > bad_file: >@@ -358,8 +369,11 @@ > if (!file) > goto bad_file; > if (file->f_op && (file->f_mode & FMODE_WRITE) && >- (file->f_op->writev || file->f_op->write)) >+ (file->f_op->writev || file->f_op->write)) { >+ down(&file->f_pos_lock); > ret = do_readv_writev(VERIFY_READ, file, vector, count); >+ up(&file->f_pos_lock); >+ } > fput(file); > > bad_file: >@@ -392,7 +406,9 @@ > goto out; > if (pos < 0) > goto out; >+ down(&file->f_pos_lock); > ret = read(file, buf, count, &pos); >+ up(&file->f_pos_lock); > if (ret > 0) > dnotify_parent(file->f_dentry, DN_ACCESS); > out: >@@ -424,7 +440,9 @@ > if (pos < 0) > goto out; > >+ down(&file->f_pos_lock); > ret = write(file, buf, count, &pos); >+ up(&file->f_pos_lock); > if (ret > 0) > dnotify_parent(file->f_dentry, DN_MODIFY); > out: >diff -urX nopatch linux-2.4.26-ow2/include/linux/fs.h linux/include/linux/fs.h >--- linux-2.4.26-ow2/include/linux/fs.h Tue Jun 15 13:29:10 2004 >+++ linux/include/linux/fs.h Mon Jun 28 19:10:57 2004 >@@ -584,6 +584,8 @@ > /* preallocated helper kiobuf to speedup O_DIRECT */ > struct kiobuf *f_iobuf; > long f_iobuf_lock; >+ >+ struct semaphore f_pos_lock; > }; > extern spinlock_t files_lock; > #define file_list_lock() spin_lock(&files_lock);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 56074
:
21716
|
21755
| 21757 |
21767